在 sendMessage 中将 NSManagedObject 数组发送到 watchOS:回复处理程序

Send array of NSManagedObject to watchOS in sendMessage: reply handler

以下是 watchOS 与我的应用程序的 iOS 组件之间通信的测试方法:

- (void)session:(WCSession *)session didReceiveMessage:(NSDictionary<NSString *,id> *)message replyHandler:(void (^)(NSDictionary<NSString *,id> * _Nonnull))replyHandler {

    NSArray *responseArray = @[@"hello", "world"];
    NSDictionary *responseDict = @{@"response": responseArray};
    replyHandler(response);   
}

这非常有效 - 在手表的回复处理程序中,我可以记录 responseDict 的内容并查看对象 @"hello"@"world"。但是,如果我将 responseArray 更改为包含 NSManagedObject 实例(用于将实际数据发送到手表),则会触发 sendMessage 错误处理程序并显示 Payload could not be delivered 错误。在我更改我的数据库结构以包含我需要发送的实体的 uuid 之前(这样我就可以将它们以 NSString 格式的 UUID 表示),我只是想检查一下:是否真的可以将 NSManagedObject 实例发送到 watchOS?

不,无法在上下文、线程或设备之间发送 NSManagedObject 个实例。

托管对象仅存在于其托管对象上下文中。如果您试图在上下文之外访问或复制它,它的数据将为零。

如果您的 Core Data 持久存储在 phone 上,但您想在手表上显示托管对象的数据,您首先要将数据从托管对象移动到另一种类型(例如,字典),然后将该数据发送到手表。

有关详细信息,请参阅