3

当我尝试使用 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

任何帮助表示赞赏。

4

2 回答 2

0

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

MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {

} completion:^(BOOL success, NSError *error) {
    if(success){
        NSLog(@"success");
    }
}];
于 2015-03-03T11:28:30.337 回答
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);
        }];
    }];
}

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

实现 API 时如何避免在块中捕获自我?

于 2013-02-19T14:49:58.370 回答