4

私のアプリには、UIImagePickerControllerがあります。画像が選択されると、ビューコントローラーは画像を取得して別のビューコントローラーに渡す必要があります。このビューコントローラーはself.navigationControllerにプッシュされます。しかし、私は常にSEGFAULTSまたはnil引数、およびそのようなものを取得しています。このコードの何が問題になっているのか教えていただければ幸いです。

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:

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

どちらも、UIImage*currentpictureとして定義されたcurrentpictureを持っています。
私は今、いくつかのデータとしてcurrentpictureを持っているはずですが、それは毎回クラッシュします!私はいろいろなことを試しましたが、これを理解することはできません。

4

2 に答える 2

6

間違っていたら訂正してください。ただし、UIImage は NSCopying に準拠していないため、正常にコピーできません。

おそらくやりたいことは、イメージを保持することです。self.currentpicture が「retain」プロパティの場合、以前のオブジェクトが自動的に解放され、新しいオブジェクトが保持されるため、次のようにします。

self.currentpicture = img;

それ以外の場合は、自分で行います:

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

どちらの場合も、画像が不要になったら [self.currentpicture release] を呼び出す必要があります。通常、「self」オブジェクトの dealloc メソッドでこれを行います。

于 2009-03-20T12:44:56.973 に答える