ManagedObjectContext save导致NSManagedObject数据损坏/失效

时间:2012-06-14 19:28:50

标签: iphone ios core-data nsmanagedobjectcontext

保存上下文时遇到此问题。这是间歇性的。有一半的时间,上下文正确保存,一半,对象的成员变为空(实际上没有任何东西留在上下文中。

“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个对象。这一切都在主线程中完成。有任何想法吗?我现在真的很难过。

1 个答案:

答案 0 :(得分:1)

也许您应该遵循许多代码示例中演示的Apple建议,并在获取和设置NSManagedObject的子类属性时使用通常的模式。您应该在@properties中声明@interface,并使用@dynamic自动设置/获取。

@interface MyObj : NSManagedObject 
@property (nonatomic, retain) NSString * message;
@end 

@implementation MyObject
@dynamic message;
@end

如果您需要自定义访问者,请在实施中覆盖(NSString *)message