这很奇怪,因为这个错误不会一直发生......
我有以下代码:
- (IBAction)getPhoto:(id)sender {
UIImagePickerController * picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
#if TARGET_IPHONE_SIMULATOR
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
#else
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
#endif
[self presentModalViewController:picker animated:YES];
}
使用相应的委托选择器
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIImage *image = [[info objectForKey:@"UIImagePickerControllerOriginalImage"] imageByScalingToSize:CGSizeMake(480, 320)];
[[self imageView] setImage:image];
[picker dismissModalViewControllerAnimated:YES];
}
奇怪的是,有时图像出现在imageView中,有时则不然。我叫过
(gdb)po UIImagePNGRepresentation(image)有没有人经历过同样的事?有人找到了解决方案吗?
提前致谢
最高
答案 0 :(得分:3)
听起来你的内存不足。
我认为您应该在UIImagePickerController
将其放在屏幕上后发布presentModalViewController:
。
(它将由呈现它的视图控制器保留给你)
答案 1 :(得分:1)
解决方案是:
在拍摄照片后,系统会调用控制器中的receivedMemoryWarning。但控制器本身仍保留。按下使用时,将执行委托选择器并设置imageView中的图像。但在解除模态视图后,系统会从笔尖重新初始化视图。因此,来自nib的图像会覆盖委托选择器中的图像集。 解决方案是将所有文本字段和视图的内容存储在字典中的didReceiveMemoryWarning中,并将图像存储在实例变量中,并在viewDidLoad中重置它们(如果它们存在)。
答案 2 :(得分:1)
是的,这是适合我的解决方案。使用didreceivememorywarning将所有textfield和uiimage数据存储到手机中。在pickerdidfinish我也将图像保存到手机。 Onload我检查手机中是否存在该图像文件名,如果是,则加载它。基本上iPhone OS正在关闭你的应用程序并重新打开它。在viewDidLoad中放入一些NSLog,你会发现在图像获取过程中会调用它。该方法只能被调用一次。如果再次调用则表示您的应用程序已经死亡并重新启动。这是一个记忆问题。没有足够的马力。我没有在iPhone 3GS上看到这个问题
答案 3 :(得分:1)
即使在3GS上我也遇到了这个问题。但我可以通过在设置imageView.image之前释放UIImagePickerViewController 来解决它 我猜这释放了几个字节。也许这个信息有帮助。
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
[self dismissModalViewControllerAnimated:YES];
[picker release];
UIImage *image = [info valueForKey:UIImagePickerControllerOriginalImage];
imageView.image = image;
}