私はコアデータを使用しており、バックグラウンドから再開した後にアプリケーションがクラッシュすることがあります。 NSManagedObject
サブクラスのプロパティにアクセスしようとすると、ブロックメソッド本体の内部で発生したクラッシュを特定しました。バックグラウンドから再開した後にコアデータNSManagedObjectにアクセスすると、アプリケーションがクラッシュする
私はNSManagedObject
サブクラスへの参照を保持するプロパティを持っています。
@property(nonatomic、strong)CalItem * calObject;
私は最初のViewController(NoteViewController
)ブロックを渡す(NoteTextBlock
)子を呼び出す必要がクラッシュを再現します。
NoteViewController *noteViewController = [[NoteViewController alloc]initWithNote:self.calObject.note NoteTextBlock:^(NSString *noteText) {
self.calObject.note = noteText; //crashing here
}];
次に、アプリをバックグラウンドに送信して再開します。 その後、NoteViewControllerで呼び出し側のviewControllerにメッセージを返します。ブロック戻り、ラインself.calObject.note = noteText
アプリのクラッシュを実行します
if (self.noteTextBlock)
{
self.noteTextBlock(trimmedString);
}
。
明らかにブロックをスタックに置くことはできず、アプリケーションを再開してブロック内で定義されたものを続行することはできません。あるいは私はここで何か悪いことをしていますか?
編集:
*** Terminating app due to uncaught exception 'NSObjectInaccessibleException', reason: 'CoreData could not fulfill a fault for '0xb253100 <x-coredata://C2304B7C-7D51-4453-9993-D33B9113A7A5/DTODay/p57>''
ブロックは子供のViewController内で次のように定義されています
@property(nonatomic, copy)NoteTextBlock noteTextBlock;
EDIT2
これは私がにブレークポイントを設定したときに、私が得るものですそれがクラッシュする行。
(lldb) po self.calObject
$2 = 0x0b4464d0 <DTODay: 0xb4464d0> (entity: DTODay; id: 0xb489d00 <x-coredata://C2304B7C-7D51-4453-9993-D33B9113A7A5/DTODay/p57> ; data: <fault>)
私はすべてのコアデータのものを管理するためにMagicalRecord libにを使用しています。
- (void)applicationDidBecomeActive:(UIApplication *)application
{
if ([NSManagedObjectContext MR_defaultContext] == nil
|| [NSManagedObjectModel MR_defaultManagedObjectModel] == nil
|| [NSPersistentStoreCoordinator MR_defaultStoreCoordinator] == nil
|| [NSPersistentStore MR_defaultPersistentStore] == nil
)
{
//coming back from background, re-init coredata stack
[MagicalRecordHelpers setupCoreDataStackWithAutoMigratingSqliteStoreNamed:DBNAME];
}
よりよく問題を理解することができるかもしれませんが、あなたはクラッシュメッセージを提供してもらえますか? –
クラッシュ前のcalObjectのmanagedObjectContextとは何ですか?無名ですか? –
ブロックをコールバックとして使用している途中でアプリケーションが終了して再開するときにのみ問題が発生します。他の状況では、私はかなり問題なくcalObjectを使って再開し続けます。何とかブロック内のブロックまたは「自己」が正しく保持されない可能性はありますか? – Oysio