【问题标题】:My app crashes if I change the control view repeatedly如果我反复更改控制视图,我的应用程序会崩溃
【发布时间】:2012-01-29 13:52:01
【问题描述】:

我有一个应用程序,它从数据库中读取一些数据 ( ASIFormDataRequest ) 和来自服务器文件 ( setImageWithURL ) 的一些图像。每次更改 viewController 时,我的应用都会执行此操作(以便更新所有内容)。所以我猜缓存图像存在问题如果我将我的应用程序推到极限切换视图控制器反复我的应用程序崩溃。这是为什么呢?

所有这些都是在添加 setImageWithURL 函数后出现的。有没有人遇到过类似的事情?

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

已编辑:(尚未回答):

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) // 在这里停止 正在运行。

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

  • 基于 5 图标 TabBar。

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

  • 在第三个图标中,我有一个结账篮,在滚动视图(那里有一个购买按钮)上拾取的所有产品都被按下。

情况是,我在 launchWithOptions 和每次更改 viewController 时从数据库中“读取”了 Asycn 的所有信息(没有图片),以确保用户不会拿起已售罄的产品。我自己植入了它,它似乎工作得很好,并且不会让我的应用程序崩溃(信息:名称,股票,......只有字符串)。光数据。

这就是我认为问题所在:我从 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"]] ;

够了吗?我没有了。

想要的提示:

  • 你们如何/在哪里“读取”来自 URL 的图像,以免应用程序崩溃但始终更新应用程序?
  • 我的缓存是否发生了什么让我发疯的事情?修复它?

提前感谢您的关注

【问题讨论】:

  • 我认为您需要提供更多信息。为什么你的应用程序崩溃?是内存不足还是您尝试访问已释放的对象时遇到了 BAD_ACCESS?在不了解问题的情况下,我认为没有人能够提供解决方案。
  • 嘿,罗伯托,您能发布代码和您遇到的错误吗?这样可以更轻松地为您提供帮助。
  • 当它停止时,调用堆栈窗口中是否显示任何内容? (可以肯定地说,您遇到了某种存储问题。由于这些问题的呈现方式因 iOS 版本和 Xcode 版本而异,您应该确定您使用的是哪些版本。)
  • 你的 -(void)dealloc 方法是什么样的?

标签: ios image url caching


【解决方案1】:

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

我通过将所有核心数据的读取、写入和更新移至主线程解决了这个问题。 (以 Swift 为例):

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    相关资源
    最近更新 更多