CoreDataを使用していて、ManagedObjectContextオブジェクトを1つのViewControllerから2番目のViewControllerに渡そうとしています。
FirstViewControllerのコードは次のとおりです。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"showDetail"])
{
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];
self.managedObjectContext = [self.fetchedResultsController managedObjectContext];
[[segue destinationViewController] setManagedObjectContext:self.managedObjectContext];
}
}
prepareForSegueは、2番目のViewControllerでsetManagedObjectContextと呼ばれる私が作成したメソッドを呼び出します。
-(void)setManagedObjectContext:(NSManagedObjectContext *)managedObjContext
{
self.managedObjectContext = managedObjContext;
//NSManagedObjectContext *context = managedObjContext;
}
このコードがヒットすると、Xcodeがロックアップし、最終的にBAD_Accessメモリエラーがスローされます。このコードをデバッグすると、managedObjContextには有効なメモリ位置がありますが、コード行が何度も何度もヒットし続けるため、XCodeがクラッシュします。
self.managedObjectContextは、SecondViewControllerクラスにあるプロパティであり、次のように宣言されています。
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
コメントアウトされた行は、使用すれば問題なく機能します。
NSManagedObjectContext *context = managedObjContext;
ですから、プロパティを使うことが問題を引き起こしているように見えますが、私は確かにそれを使いたいと思います。プロパティを使用したくない理由について何か説明はありますか?
ありがとう!ノミ