Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 退出/ui图像选择器后执行代码/ui_Iphone_Uiimagepickercontroller - Fatal编程技术网

Iphone 退出/ui图像选择器后执行代码/ui

Iphone 退出/ui图像选择器后执行代码/ui,iphone,uiimagepickercontroller,Iphone,Uiimagepickercontroller,我有一个简单的iPhone应用程序。 我显示一个UIImagePicker,让用户选择一个图像。 然后,我在图像上执行一些代码,并希望在UIImagePicker被解除后执行这些代码 编辑:更新代码,问题仍然存在: -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { NSData* data = UIImage

我有一个简单的iPhone应用程序。
我显示一个UIImagePicker,让用户选择一个图像。
然后,我在图像上执行一些代码,并希望在UIImagePicker被解除后执行这些代码

编辑:更新代码,问题仍然存在:

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    NSData* data = UIImagePNGRepresentation([info objectForKey:@"UIImagePickerControllerOriginalImage"]);
    [[picker parentViewController] dismissModalViewControllerAnimated:TRUE];
    [self executeSomeCode: data];
}
但是,当我运行代码时,它将挂起UIImagePicker来运行我的代码,然后在所述代码执行后,UIImagePicker将被可视化地解除

有什么想法吗?

我相信你的电话在iOS3中被否决了

你可以试试

(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
并在关闭viewController之前从图像中获取数据

NSData *data = UIImageJPEGRepresentation( [info objectForKey:@"UIImagePickerControllerOriginalImage"] , 1.0);
[self dismissModalViewControllerAnimated:TRUE];
[self executeSomeCode:img];

我意识到这不是最优雅的回答。我以前也遇到过类似的问题(试图在ViewDidDisplay中执行不起作用的可视化操作)。我发现通过调用
performSelector:withObject:afterDelay:
可以看到我的视觉效果

因此,在您的情况下,它将是:

[self performSelector:@selector(executeSomeCode:) withObject:data afterDelay:0];

我不知道这对你是否有效(或者为什么对我有效)。

我不认为你在你认为的地方被绞死。据我所知,UIImagePNGRepresentation需要相当长的时间来执行(如果您不介意无损的话,UIImageJPEG表示要快得多)。您可以将字典传递到方法中,并在其中获取所需的NSData

第二个问题是您的代码是同步的,无论您告诉控制器退出多久,它都会等待您的长代码运行。要在下一次运行循环迭代中安排繁重的代码,并让控制器退出,请使用0毫秒的延迟来执行它

我会将您的代码更改为:

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    [[picker parentViewController] dismissModalViewControllerAnimated:YES];
    [self performSelector:@selector(executeSomeCode:) withObject:info afterDelay:0.0f];
}

不必使用后台方法,但您可以尝试以下方法:

- (void)_processImage:(UIImage*)image 
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    // convert to PNG data here, etc.
    // this is background, remember to manipulate UI in main thread
    // Example: [self.anImageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO];
    [pool release];
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    [[picker parentViewController] dismissModalViewControllerAnimated:YES];
    UIImage *picked = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
    [self performSelectorInBackground:@selector(_processImage:) withObject:[[picked retain] autorelease]];
}

我相信当你关闭控制器时,你正在丢失数据,如果你先得到图像数据,那么我相信问题会消失。我获取数据,并对其进行操作。。然后关闭视图不,他没有丢失数据,问题是他希望在代码执行之前关闭imagepicker的模态视图。他可能正在用他希望用户看到的图像制作视觉动画。正如你所指出的,他应该使用正确的委托方法。好吧,我已经按照Aaron的建议实现了它,从用户的角度来看,我看不出有什么不同。UIImagePicker仍然挂起,直到executeSomeCode完成。然而,executeSomeCode工作正常——图像数据丢失根本不是问题。法律说它是可视的,这是正确的。UIImagePickerControllerOriginalImage已经定义为
NSString*const
(检查文档中的UIImagePickerControllerDelegate)。你不需要把它加引号。