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

ネストされたブロック内のスコープの問題のようです。次のようなものを書き込もうとしましたか(テストされていません):

- (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 に答える
0

メインスレッドで save メソッドを呼び出す必要があります。あなたのコードは、コアデータをブロックに保存しているように見えます。それでもうまくいかない場合は、以下のコードを使用して保存できます。

MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {

} completion:^(BOOL success, NSError *error) {
    if(success){
        NSLog(@"success");
    }
}];
于 2015-03-03T11:28:30.337 に答える