当我尝试使用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
感谢任何帮助。
答案 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");
}
}];