在 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 上,但您想在手表上显示托管对象的数据,您首先要将数据从托管对象移动到另一种类型(例如,字典),然后将该数据发送到手表。
有关详细信息,请参阅 。
以下是 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 上,但您想在手表上显示托管对象的数据,您首先要将数据从托管对象移动到另一种类型(例如,字典),然后将该数据发送到手表。
有关详细信息,请参阅