Cor*_*eke 18 iphone cocoa cocoa-touch core-data objective-c
这适用于iPhone应用程序,但我认为这并不重要.我需要使用iPhone的GameKit通过蓝牙发送自定义对象(由Core Data管理).通常,我只是使用NSKeyedArchiver将对象打包为数据对象并将其发送到线上,然后取消归档对象,我就完成了.当然,我还需要在我的自定义对象中实现initWithCoder:和encodeWithCoder:方法.
我不确定是否可以使用NSManagedObject类完成此操作,该类由Core Data管理或不管理.他们会一起玩吗?我猜测一旦我将编码的托管对象发送到另一个设备并取消编码,我只会将此接收的对象添加到其他设备的上下文中.它是否正确?我错过了任何步骤吗?
Bar*_*ark 27
NSManagedObject实例不能在实例之外有意义地存在NSManagedObjectContext,所以我不打算尝试NSCoding直接序列化和反序列化NSManagedObject两个上下文之间的舞蹈(你可以这样做;见下文).相反,我会创建一个具有相应属性键/值的字典(您可以通过托管对象实例的属性名称获取属性名称instance.entity.attributesByName.allKeys(您可以使用[instance dictionaryWithValuesForKeys:keys]获取属性字典:值对).我将发送关系信息为NSURL-编码NSManagedObjectIDs.不要忘了,包括实例managedObjectID(作为NSURL)在词典中,这样就可以重新连接任何关系到另一端的对象.你必须为实例关系的任何目标递归创建这些字典你'编码.
然后通过网络发送dict,并在另一端重新构建它们作为新托管对象上下文中的实例(您可以使用setValuesForKeysWithDictionary:).
你可能会注意到,这正是该NSCoder系统会为你做什么,除非你将不得不使用classForCoder,replacementObjectForCoder:并awakeAfterUsingCoder:使用自定义沿NSDictionary子类来处理所有的NSManageObject至- NSDictionary映射,反之亦然.根据我的经验,这段代码比它的价值更麻烦,除非你有一个复杂/深层的对象图,你试图序列化.对于NSManagedObject没有关系的单个实例,只需转换为dict并返回自己就更容易了.
| 归档时间: |
|
| 查看次数: |
6825 次 |
| 最近记录: |