MagicalRecord save导致EXC_BAD_ACCESS

时间:2012-11-05 20:25:33

标签: iphone objective-c core-data exc-bad-access magicalrecord

当我尝试使用MagicalRecord“保存”时,我遇到了问题。我的代码:


- (void) findInternetObject {
    [InternetObjectFinder runBlockSuccess:^(NSManagedObject *obj) {
        obj.attr1 = @"abc";
        [[NSManagedObjectContext MR_defaultContext] MR_saveErrorHandler:^(NSError *error) {
               NSLog(@"failed to save attr1, Error: %@, %@", error.localizedDescription, error.userInfo);
        }];
    }];
}

其中obj是在“InternetObjectFinder”类中的方法“runBlockSuccess”方法中创建的:


InternetObject *obj = [InternetObject MR_createEntity];

应用程序在行崩溃:

[NSManagedObjectContext MR_defaultContext] MR_saveErrorHandler

错误:EXC_BAD_ACCESS

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

它似乎是嵌套块中的范围问题, 你有没有试过写这样的东西(未经测试):

- (void) findInternetObject {
    NSManagedObjectContext *defaultContext = [NSManagedObjectContext MR_defaultContext];
    [InternetObjectFinder runBlockSuccess:^(NSManagedObject *obj) {
        obj.attr1 = @"abc";
        [defaultContext MR_saveErrorHandler:^(NSError *error) {
               NSLog(@"failed to save attr1, Error: %@, %@", error.localizedDescription, error.userInfo);
        }];
    }];
}

如果问题仍然存在,也许这个详细的答案可以帮到你:

  

How do I avoid capturing self in blocks when implementing an API?

答案 1 :(得分:0)

您应该在主线程上调用save方法。您的代码看起来正在将核心数据保存到块中。如果这不起作用,您可以使用以下代码进行保存。

MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {

} completion:^(BOOL success, NSError *error) {
    if(success){
        NSLog(@"success");
    }
}];