2009-03-20 20 views
4

내 응용 프로그램에는 UIImagePickerController가 있습니다. 이미지를 선택하면 내 뷰 컨트롤러가 이미지를 가져 와서 다른보기 컨트롤러에 전달해야 self.navigationController에 푸시됩니다. 그러나 나는 항상 SEGFAULTS 또는 nil 논증을 얻고 있습니다. 당신이 말해 줄 수 있다면이 코드에 어떤 문제가 있는지 감사하겠습니다 :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을 준수하지 않는 : 다음과 같이 UIImage *currentPicture은 다음 응용 프로그램 위임에 정의 할 수 예를 들어

은 뷰 컨트롤러 클래스의 모두에 액세스 따라서 성공적으로 복사 할 수 없습니다.

아마도 당신이 원하는 것은 이미지를 유지하는 것입니다. 그렇지 않으면 그것을 스스로 할

self.currentpicture = img; 

: 모두에서

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

self.currentpicture은 재산을 '유지'이면, 자동으로, 그래서 그냥 이렇게, 이전 객체를 해제하고 새로운 하나를 유지합니다 이미지가 더 이상 필요하지 않은 경우에도 [self.currentpicture release]를 호출해야합니다. 대개 'self'객체의 dealloc 메소드에서 그렇게 할 것입니다.

-2

다른보기 컨트롤러 클래스간에 데이터를 공유하는 한 가지 방법은 앱 대리인을 사용하는 것입니다. 내가 틀렸다면

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