4

私のアプリでは、私はUIImagePickerControllerを持っています。画像が選択されると、私のView Controllerは画像を取得し、それを別のView Controllerに渡す必要があります。これはself.navigationControllerにプッシュされます。しかし、私は常にSEGFAULTSや無関心な議論をしています。あなたが私に言うことができれば、私はこのコードで何が間違っていることを感謝:iPhone UIImagePickerController didFinishPickingImage:ビューコントローラ間のUIImage転送ですか?

FirstViewController.m:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)img editingInfo:(NSDictionary *)editInfo { 
self.currentpicture = [img copy]; 
[self dismissModalViewControllerAnimated:YES]; 
[self goNext]; 
} 
-(void)goNext{ 
SecondViewController *vc = [[SecondViewController alloc] initWithNibName:@"Second" bundle:nil]; 
[vc giveMePicture:currentpicture]; 
[self.navigationController pushViewController:vc animated:YES]; 
} 

SecondViewController.m:currentpicture UIImageとして定義

-(void)giveMePicture:(UIImage *)data { 
self.currentpicture=[data copy]; 
} 

彼らの両方がいます* currentpicture;
私は今現在にしてくださいは、いくつかのデータとして現在の写真がありますが、毎回クラッシュします!私は多くの異なったことを試みましたが、私はこれを理解できません。

答えて

6

が私を修正しますが、UIImageがNSCopyingに準拠していません。したがって、正常にコピーすることはできません。

あなたがしたいことは、画像を保持することです。それ以外の場合はそれを自分で行う

self.currentpicture = img; 

:両方で

[self.currentpicture release]; 
self.currentpicture = [img retain]; 

self.currentpictureプロパティを「保持」である場合は、自動的にこれだけこれを行う、前のオブジェクトを解放し、新しいものを保持します画像が必要なくなった場合でも[self.currentpicture release]を呼び出す必要があります。通常は、 'self'オブジェクトのdeallocメソッドで行います。

-2

異なるビューコントローラクラス間でデータを共有する1つの方法は、アプリケーションデリゲートを使用する方法です。

たとえばあなたがUIImage *currentPictureがあなたのアプリデリゲートで定義されている可能性があり、その後、次のようにあなたのビューコントローラクラスの両方にアクセスします。私が間違っている場合

MyAppDelegate *appDelegate = (MyAppDelegate*)[[UIApplication sharedApplication]delegate]; 
UIImage *i = [appDelegate.currentPicture];