保存上下文时遇到此问题。这是间歇性的。有一半的时间,上下文正确保存,一半,对象的成员变为空(实际上没有任何东西留在上下文中。
“mylist”是NSManagedObject的列表,它属于我正在保存的上下文。 “结果”始终为“是”,因此没有错误。
// prints out results before save
for (MyObj* obj in mylist) {
NSLog(@"%p, %@", obj, [obj message]);
}
//context save here
NSError *error;
BOOL result = [[[Core appDelegate] managedObjectContext] save:&error];
if (!result) {
NSLog(@"Save Failed!");
NSLog(@"report: %@, %@, %@", error, [error userInfo],[error localizedDescription]);
} else {
NSLog(@"Save succeeded");
}
// prints out results after save
for (MyObj* obj in mylist) {
NSLog(@"%p, %@", obj, [obj message]);
}
控制台显示如下内容:
0x9af6990, message0
0x9af8910, message1
0x9afa390, message2
0x9afa5a0, message3
Save succeeded
0x9af6990, (null)
0x9af8910, (null)
0x9afa390, (null)
0x9afa5a0, (null)
我也尝试从上下文中重新获取,并在保存后得到0个对象。这一切都在主线程中完成。有任何想法吗?我现在真的很难过。
答案 0 :(得分:1)
也许您应该遵循许多代码示例中演示的Apple建议,并在获取和设置NSManagedObject
的子类属性时使用通常的模式。您应该在@properties
中声明@interface
,并使用@dynamic
自动设置/获取。
@interface MyObj : NSManagedObject
@property (nonatomic, retain) NSString * message;
@end
@implementation MyObject
@dynamic message;
@end
如果您需要自定义访问者,请在实施中覆盖(NSString *)message
。