次のメソッドをUserService
含むシングルトンがあります。book.downloaded
進捗コールバックを設定する行で EXC_BAD_ACCESS を取得しています。
ユーザーが現在のビュー (現在はテーブルの詳細ビュー) を終了した場合でも、サービスがブック オブジェクトのダウンロードと更新を続行するようにします。詳細ビューを開いたままにしておくと、すべて正常に機能しますが、親テーブル ビューに戻ると、アクセスがうまくいきません。
私の最初の考えは、それbook
が ARC によってリリースされているということでしたが、それは筋が通っていません。他のプロパティを設定したり、の現在の値を読み取ったりすることもできますがbook.downloaded
、設定しようとするとすぐに. ブーム。
Book
重要な場合は、mogenerator によって生成された CoreData クラスです。
// UserService is a singleton.
// Only errors if I back out of the detail view to the parent table view.
-(void)addBook:(Book *)book downloadProgress:(void (^)(Book *))progressCb downloadComplete:(void (^)(Book *))cb {
book.purchasedValue = YES;
book.downloadedValue = 0.0;
// making my UserService own the book with a strong reference doesn't help
self.strongBookProperty = book;
[FileService.shared
downloadFiles:[FileService.shared byBookId:book.bookId]
progress:^(float percent) {
book.title = @"fake title"; // no error!
NSLog(@"old downloaded %@", book.downloaded); // no error!
book.downloaded = [NSNumber numberWithFloat:percent]; // EXC_BAD_ACCESS
progressCb(book);
}
complete:^() {
book.downloaded = [NSNumber numberWithFloat:1.0];
cb(book);
}
];
}
更新book.downloaded
これを開始する詳細ビューでキー値を監視しています。キー値の観察をコメントアウトしても、エラーにはなりません。なんで?(明らかに、これにより私のビューは更新されません)。これは、そのプロパティのみがエラーをスローした理由を説明しています (キー値が観察されているのはこれだけです)。