【问题标题】:Send array of NSManagedObject to watchOS in sendMessage: reply handler在 sendMessage 中将 NSManagedObject 数组发送到 watchOS:回复处理程序
【发布时间】:2016-04-17 18:11:37
【问题描述】:

以下是我的应用程序的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?

【问题讨论】:

    标签: ios core-data nsmanagedobject watchos-2


    【解决方案1】:

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

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

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

    更多详情请见this answer

    【讨论】:

    • 谢谢,这非常有帮助。我将为需要与手表共享的实体添加一个 UUID 属性,以便它们的数据可以存储在 NSDictionaries 中,然后发送到手表,并在从手表发回时与实体进行核对。
    猜你喜欢
    • 2013-11-17
    • 2016-08-27
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多