Сохранение MagicalRecord вызывает EXC_BAD_ACCESS

У меня возникают проблемы, когда я пытаюсь «сохранить» с помощью 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 был создан в методе "runBlockSuccess" в классе "InternetObjectFinder":


InternetObject *obj = [InternetObject MR_createEntity];

Приложение вылетает на строке:

[NSManagedObjectContext MR_defaultContext] MR_saveErrorHandler

с ошибкой: EXC_BAD_ACCESS

Любая помощь приветствуется.


person Yuchen Wang    schedule 05.11.2012    source источник


Ответы (2)


Кажется, это проблема области внутри ваших вложенных блоков, вы пытались написать что-то вроде этого (не проверено):

- (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?

person Alessandro    schedule 19.02.2013

Вы должны вызвать метод сохранения в основном потоке. Ваш код выглядит так, что вы сохраняете основные данные в блок. Если это не сработает, вы можете использовать приведенный ниже код для сохранения.

MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {

} completion:^(BOOL success, NSError *error) {
    if(success){
        NSLog(@"success");
    }
}];
person Rajesh Maurya    schedule 03.03.2015