0

保存上下文时我遇到了这个问题。它是间歇性的。一半的时间,上下文正确保存,一半的时间,对象的成员变为空(实际上上下文中没有任何内容。

“mylist”是 NSManagedObject 的列表,它属于我正在保存的上下文。“结果”始终为 YES,因此没有错误。

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

4

1 回答 1

1

也许您应该遵循 Apple 在众多代码示例中展示的建议,并在获取和设置NSManagedObject. 您应该@properties在 中声明@interface并使用 自动设置/获取@dynamic

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

@implementation MyObject
@dynamic message;
@end

如果您需要自定义访问器,只需(NSString *)message在您的实现中覆盖。

于 2012-06-14T22:12:42.253 回答