Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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
Ios 为什么我选择的图像仅在我第一次加载视图时显示在UIImageView中,而如果我再次选择它,则不再显示_Ios_Objective C_Image_Uiimageview - Fatal编程技术网

Ios 为什么我选择的图像仅在我第一次加载视图时显示在UIImageView中,而如果我再次选择它,则不再显示

Ios 为什么我选择的图像仅在我第一次加载视图时显示在UIImageView中,而如果我再次选择它,则不再显示,ios,objective-c,image,uiimageview,Ios,Objective C,Image,Uiimageview,这是我关于StackOverFlow的第一个问题,所以我希望我现在做得很好 为了尽可能好地解释我的问题,以下是我的主要董事会的两个相关观点: 在第一个屏幕上,显示了一个地点列表,隐藏了多个信息,如GPS坐标、电话号码、地点描述、图片名称(xxx.jpg/.png)。 当用户单击列表中的一个位置时,应用程序会将他带到下一个视图,其中显示所有这些信息 ->一切看起来都是正确的 但如果我返回列表,再次单击同一位置,则图片将不再显示,UIImageView将保持为空。 这在每个地方都有发生。图片只显示一

这是我关于StackOverFlow的第一个问题,所以我希望我现在做得很好

为了尽可能好地解释我的问题,以下是我的主要董事会的两个相关观点:

在第一个屏幕上,显示了一个地点列表,隐藏了多个信息,如GPS坐标、电话号码、地点描述、图片名称(xxx.jpg/.png)。 当用户单击列表中的一个位置时,应用程序会将他带到下一个视图,其中显示所有这些信息

->一切看起来都是正确的

但如果我返回列表,再次单击同一位置,则图片将不再显示,UIImageView将保持为空。 这在每个地方都有发生。图片只显示一次

由于所有图片都存储在同一个位置,我将“构造”为NSURL设置的URL

NSString *DebutLien = @"http://www.otmval.com/membre/img_activites/miniature/";

self.currentPlace.photo1 = [NSString stringWithFormat:@"%@%@",DebutLien,self.currentPlace.photo1];

    // Loading the picture in background

        dispatch_async(dispatch_get_global_queue(0,0),
            ^{
                NSURL * imageURL1 = [NSURL URLWithString:self.currentPlace.photo1];
                NSData * imageData1 = [NSData dataWithContentsOfURL:imageURL1];
                UIImage * image1 = [UIImage imageWithData:imageData1];

                dispatch_async(dispatch_get_main_queue(),
                    ^{
                        [imageView setImage:(image1)];
                    });
            });

    imageView.contentMode = UIViewContentModeScaleAspectFit;
结果如下:

正如你在左边看到的,一切都显示得很好。 但是在第二张图片上,如果我从列表中重新选择相同的位置,那么图片不会出现,我也不知道为什么

很高兴知道,即使不使用调度队列,问题也会发生。

我已经搜索了很长时间,但似乎我的问题并不容易描述,所以我希望我能在这里找到答案


提前感谢您的评论,并花时间来帮助我!:)

您的问题可能是调用异步块。您可以尝试在内部的Dispatch块上进行同步

在这里,您可以找到详细的解释:


我没有足够的声誉,所以我将把它作为一个答案发布。

您的问题可能在于调用异步块。您可以尝试在内部的Dispatch块上进行同步

在这里,您可以找到详细的解释:



我没有足够的声誉,因此我会将其作为答案发布。

不幸的是,即使我直接加载图片而不是在背景中加载,我也会遇到同样的问题。第二次图片将不会出现。(我尝试在内部调度块上使用dispatch_sync,同一问题)也许您的变量currentPlace.photo1在第一次单击后以某种方式被释放,或者是空的?你检查过了吗?在主队列上执行dispatch_sync是非常危险的,只有当你100%确定主线程不忙时才应该执行。我检查过,即使是第二次我想显示图片时,链接也很好。由于某种原因,我还不知道,代码第二次没有进入主队列,因此图片不会显示。不幸的是,即使我直接加载图片而不是在后台加载,我也会遇到同样的问题。第二次图片将不会出现。(我尝试在内部调度块上使用dispatch_sync,同一问题)也许您的变量currentPlace.photo1在第一次单击后以某种方式被释放,或者是空的?你检查过了吗?在主队列上执行dispatch_sync是非常危险的,只有当你100%确定主线程不忙时才应该执行。我检查过,即使是第二次我想显示图片时,链接也很好。由于某种原因,我还不知道,代码第二次没有进入主队列,因此图片不会显示。不幸的是,即使我直接加载图片而不是在后台加载,我也会遇到同样的问题。第二次图片将不会出现。(我尝试在内部调度块上使用dispatch_sync,同一问题)也许您的变量currentPlace.photo1在第一次单击后以某种方式被释放,或者是空的?你检查过了吗?在主队列上执行dispatch_sync是非常危险的,只有当你100%确定主线程不忙时才应该执行。我检查过,即使是第二次我想显示图片时,链接也很好。由于一个我还不知道的原因,代码第二次没有进入主队列,因此图片没有显示。你能验证你的代码第二次被调用,就像第一次一样吗?它是否会进入dispatch_async块?这是因为当您添加断点时,您会“为该线程”添加断点。当它到达dispatch_async时,该部分由另一个线程执行。您需要将断点
放在调度异步中,以查看它被调用(从新线程)。我倾向于认为错误不在您发布的代码中。它在别的地方。如果你在github上有一个项目或其他东西,请在这里发布。谢谢你的澄清。所以第二次,它进入第一个dispatch\u async,但不进入第二个,即主队列。因此图片不会显示。请不要删除您的评论。它们可能对其他人有用!你能验证你的代码第二次被调用,就像第一次一样吗?它是否会进入dispatch_async块?这是因为当您添加断点时,您会“为该线程”添加断点。当它到达dispatch_async时,该部分由另一个线程执行。您需要将断点
放在调度异步中,以查看它被调用(从新线程)。我倾向于认为错误不在您发布的代码中。它在别的地方。如果你在github上有一个项目或其他东西,请在这里发布。谢谢你的澄清。所以第二次,它进入第一个dispatch\u async,但不进入第二个,即主队列。因此图片不会显示。请不要删除您的评论。它们可能对其他人有用!你能验证你的代码第二次被调用,就像第一次一样吗?它是否会进入dispatch_async块?这是因为当您添加断点时,您会“为该线程”添加断点。当它到达dispatch_async时,该部分由另一个线程执行。您需要将断点
放在调度异步中,以查看它被调用(从新线程)。我倾向于认为错误不在您发布的代码中。它在别的地方。如果你在github上有个项目