如果我反复更改控件视图,我的应用程序崩溃

时间:2011-12-29 00:35:11

标签: ios image url caching

我有一个应用程序从数据库读取一些数据(ASIFormDataRequest)和一些来自服务器文件的图像(setImageWithURL)。我的应用程序每次更改viewController时都会这样做(为了让所有内容都更新)。所以我猜缓存图像存在问题如果我将我的应用程序推到极限切换viewControllers反复我的应用程序崩溃。这是为什么?

添加setImageWithURL函数后,所有这些都出现了。有没有人碰到类似的东西?

我可能不得不改变我的应用程序的工作方式你们如何对服务器/ SQL进行这些调用?多久一次?

已编辑:( NON_ANSWERED YET):

XCODE没有说什么,当我的设备崩溃时它只显示:

  

2011-12-29 20:14:56.479 CaeDeCajon [4969:6e4f] arrayProductos.id:13   id_producto:31 2011-12-29 20:14:56.481 CaeDeCajon [4969:7b5f]   arrayProductos.id:25 id_producto:15 2011-12-29 20:14:56.490   CaeDeCajon [4969:7b5f] arrayProductos.id:31 id_producto:15   2011-12-29 20:14:56.491 CaeDeCajon [4969:7b5f] arrayProductos.id:32   id_producto:15 2011-12-29 20:14:56.395 CaeDeCajon [4969:955f]   arrayProductos.id:22 id_producto:35(gdb)//在这里停下来   RUNNING。

为了更好地理解这个问题,我的应用程序设计如下:

  • 基于5个图标的TabBar。

  • 在第二个图标中,我有一个包含产品类别(桌子,椅子......)的桌面视图,如果按其中一个,则会出现另一个viewController(通常的详细视图),显示连续的几个产品(感谢scrollView),这里有一个带有按钮的navigationController,当按下它时会进入图库模式:显示在scrollView中显示的相同产品,但是在图库模式下,如果您按下其中一个产品它会将您带回到scrollView并将屏幕移动到所选的产品。很正常的东西。

  • 在第三个图标中,我有一个结账篮,其中按下了scrollView上的每个产品(有一个购买按钮)。

案例是我在数据库中“读取”Asycn在launchingWithOptions和每次更改viewController时的所有信息(没有图片),以确保用户没有拿到售罄的产品。我自己植入了它,它似乎工作正常,而不是崩溃我的应用程序(信息:名称,股票,...只有字符串)。光数据。

这就是我认为问题所在的地方:我“读取”1& 1(托管组件)中文件系统显示的所有图像,并且似乎工作得很好而且速度很快。问题是当我在tableView-ScrollView-galleryMode之间重复/快速地交换/更改viewController时,由于同样的原因,它连续崩溃了4次。我必须说我得到每个viewController的图像,例如scrollView,galleryMode和checkoutView中的图像是相同的。我可以重复使用吗?因为我调用了URL everyViewController,我猜这不健康。

下载图片的代码:

NSString *URLphotos =[[NSString alloc]initWithFormat:@"http://www.myurl.com/imagenes/%@",picture1.jpg]; // this is not always picture1.jpg but I changed it for making it plainer.
     

[cell.photo setImageWithURL:[NSURL URLWithString:URLphotos]   placeholderImage:[UIImage imageNamed:@“placeHolder.png”]];

够了吗?我没有了。

想要提示:

  • 你们如何/在哪里“读取”网址中的图片,以免让应用程序崩溃但是应用程序一直在更新?
  • 我的缓存是否有什么东西让我发疯?修好了吗?

提前感谢您的兴趣

1 个答案:

答案 0 :(得分:0)

目前还不清楚你是否使用了Coredata,但我对应用程序有类似的体验。它还有一个标签栏,快速按下项目会导致随机崩溃。问题是同时读取/更新/删除了coredata。

我通过将所有coredata读取,写入和更新移动到主线程来解决了这个问题。 (Swift中的例子):

dispatch_async(dispatch_get_main_queue(), {
            myDatabase("NameHere", theCommand: "TRUNCATE", theQuery: "dummy")
})

我为我需要的常见coredata命令制作了一系列函数,因此您的代码当然会有所不同。但是尝试在主线程上运行coredata,看看你的问题是否已经解决。

如果您有一个CPU密集型的coredata任务,那么您将不应该在主线程上运行,但是解决方案的复杂性会增加(我只使用Xcode 3个月)而其他人可能会提供帮助。

但如果你使用的是coredata,请先试试看它是否能解决你的问题。