【发布时间】:2012-12-10 00:57:25
【问题描述】:
我需要将NSManagedObject 的内容临时存储到字典中。因为核心数据有自己的内存管理程序,我不想保留任何指向NSManagedObject 字段的强指针,此时只有值是感兴趣的(值在视图控制器之间传递,MOC 不同)。我也不能创建弱指针,因为我想控制内存回收何时完成。
我尝试了几件事,都失败了或不符合目的。
重复的
[[myNSMO alloc] initWithEntity:[NSEntityDescription entityForName:entity inManagedObjectContext:myNSMO.managedObjectContext] insertIntoManagedObjectContext:nil];它可以工作,但不适合我的应用设计(无需详细说明)使用
[myNSMO dictionaryWithValuesForKeys:<#(NSArray *)#>]从NSManagedObject生成NSDictionary。这不行,因为它返回一个包含 NSManagedObject 字段地址的字典。创建一个
NSDictionary使用 copyWithZone 填充每个键值,如下所示[myDictionary setObject:[myNSMO.field copyWithZone:nil] forKey:@"Key"];也不行,我还是得到字段地址...手动输入每个字段
[myDictionary setObject:[NSString stringWithFormat:@"%@",myNSMO.field ] forKey:@"Key"];这次很好,我确实得到了新的内存分配。但是手动编写代码非常耗时...
是否有人找到了聪明的方法来做到这一点?选项 1) 不起作用的原因是因为我将字典用作队列。我首先存储对象的副本,然后在需要时弹出条目。然后将该特定字典条目的副本返回到询问方法。问题是我无法创建使用 [[...] insertIntoManagedObjectContext:nil]; 创建的 NSManagedObject 的副本
有什么解决办法吗?
【问题讨论】:
标签: ios core-data nsdictionary nsmanagedobject