プッシュする直前にView Controllerに割り当てているデータが、プッシュの直後にnullになる理由がわかりません。
ストレージには Core Data を使用しています。オブジェクトはProject
NSManagedObject です。
これが私の流れです:
- ホーム ビュー コントローラーで、UIImagePickerViewController を起動します。
- ファイルに
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
書き込み、パスをコア データ オブジェクトに保存します。 - コア データから親オブジェクトを取得し、null でないことを確認します。
- イメージ ピッカー ビュー コントローラーを閉じます。
- 別のビュー コントローラーをインスタンス化し、親オブジェクトをそのビュー コントローラーのプロパティに割り当てます
@property (nonatomic, strong) Project * project;
。 - その新しいView Controllerをプッシュします
- ビュー コントローラの
viewDidLoad
メソッドでは、オブジェクトが null になりました。
なぜこれが起こっているのかについて何か考えはありますか?
コードは次のとおりです。
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
// Access the uncropped image from info dictionary
UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
ImageInfo * imgInfo = [[DataController sharedController] newImageInfo];
// Create path to output images
NSString *imagePath = [NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat: @"Documents/%@.%@"
, imgInfo.filename
, imgInfo.extension]];
[UIImageJPEGRepresentation(image , 0.5) writeToFile:imagePath atomically:YES];
imgInfo.path = imagePath;
AnnotationDocument * annDoc = [[DataController sharedController] newAnnotationDocument];
[[DataController sharedController] associateImageInfo:imgInfo withAnnotationDocument:annDoc];
Project * untitledProject = [[DataController sharedController] untitledProject];
[[DataController sharedController] associateAnnotationDocument:annDoc withProject:untitledProject];
NSLog( @"UP key: %@" , untitledProject.key );
[[DataController sharedController] saveContext];
NSLog( @"UP key: %@" , untitledProject.key );
[picker dismissModalViewControllerAnimated:NO];
AnnotationDocListViewController * vc = [[AnnotationDocListViewController alloc] init];
vc.project = [[DataController sharedController] projectForKey:untitledProject.key];
[self.navigationController pushViewController:vc animated:YES];
}