cocoa touch-NSMutableArray下载时for循环崩溃

问题描述

NSMutableArray下载时for循环崩溃

在我的NSMutableArray中有4个元素,我用下面的代码下载文件,在UITextView中显示文件数据,如果不加for循环,运行正常,但是问题出在这个函数中:

- (void)complexDownload {
    int i;
    for (i=0; i < downloadArray.count; i++) {
        if (isBusy == NO) {
            [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
            downloadURL = [downloadArray objectAtIndex:i];
            NSLog(@"URL is %@", downloadURL);
            NSLog(@"Downloading object at index %i", i);
            NSURL *url = downloadURL;
            NSURLRequest *theRequest=[NSURLRequest requestWithURL:url
                                                      cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                  timeoutInterval:60.0];

            NSURLConnection *theConnection = [NSURLConnection connectionWithRequest:theRequest delegate:self];

                if (theConnection) {
                    self.downloadData = [NSMutableData data];
                    isBusy = YES;
                    NSLog(@"Busy value in download cycle equals %i, downloading", isBusy);
                } else {
                    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
                    NSLog(@"Connection failed");
                    isBusy = NO;
                }
        }
    }
}

我最初以为是isBusyBOOL的问题,但是去掉if条件之后还是会崩溃。
余下的函数如下:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [downloadData appendData:data];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    NSString *dataString = [[NSString alloc] initWithData:downloadData encoding:NSASCIIStringEncoding];
    self.dataTextView.text = dataString;
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
    NSLog(@"Download finished!");
    isBusy = NO;
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    NSLog(@"%@", error);
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}

所有的NSLogged值都正常,array中的数组链接也正确。

编译屏幕截图点击这里

解决方案

我猜测应该某些点的downloadArray[i]出了问题,或者因为它不是NSUrl。代码是在[NSURLRequest requestWithURL...]调用CFURLCopyAbsoluteURL()时崩溃的。

解决方案二:

如果你上一下出错提示,那就好办了。

时间: 2024-09-11 03:43:48

cocoa touch-NSMutableArray下载时for循环崩溃的相关文章

WWDC 2012 Session笔记——200 What is new in Cocoa Touch

这是博主的WWDC2012笔记系列中的一篇,完整的笔记列表可以参看这里.如果您是首次来到本站,也许您会有兴趣通过RSS,或者通过页面下方的邮件订阅的方式订阅本站. 之前写过一篇iOS6 SDK新内容的总览,从这篇开始,将对WWDC 2012的我个人比较感兴趣的Session进行一些笔记,和之后的笔记一起应该可以形成一个比较完整的WWDC 2012 Session部分的个人记录. 因为WWDC的内容可谓众多,我自觉不太可能看完所有Session(其实也没有这个必要..),所以对于内容覆盖上可能有所

设计模式中的迭代器模式在Cocoa Touch框架中的使用_IOS

基本理解迭代器模式(Iterrator):提供一个方法顺序访问一个聚合对象中的各个元素,而又不暴露该元素的内部表示. 当你访问一个聚合对象,而且不管这些对象是什么都需要遍历的时候,你就应该考虑用迭代器模式. 你需要对聚集有多种方式遍历时,可以考虑用迭代器模式. 迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据. 迭代器定义了一个用于访问集合元素并记录当前元素的接口. 不同的迭代器可以执行不同的迭代策略.外

《从零开始学Swift》学习笔记(Day 63)——Cocoa Touch设计模式及应用之单例模式

原创文章,欢迎转载.转载请注明:关东升的博客   什么是设计模式.设计模式是在特定场景下对特定问题的解决方案,这些解决方案是经过反复论证和测试总结出来的.实际上,除了软件设计,设计模式也被广泛应用于其他领域,比如UI设计和建筑设计等. 下面来介绍Cocoa Touch框架中的设计模式中的单例模式.   单例模式 单例模式的作用是解决"应用中只有一个实例"的一类问题.在Cocoa Touch框架中,有UIApplication.NSUserDefaults和NSNotificationC

《从零开始学Swift》学习笔记(Day 65)——Cocoa Touch设计模式及应用之选择器

原创文章,欢迎转载.转载请注明:关东升的博客   实现目标与动作关联使用UIControl类addTarget(_:action:forControlEvents:)方法,示例代码如下: button.addTarget(self, action: "onClick:", forControlEvents: UIControlEvents.TouchUpInside) 其中的action参数"onClick:"事实上就是选择器(Selector).   问题提出 任

obj-c编程14:Cocoa和Cocoa Touch简介

    这一篇篇幅相对少很多,几乎没有代码,全部都要靠本猫的语言组织能力啊!Cocoa框架在前面讲解F库时曾简单做过介绍,现在再具体说一说喽.各位童鞋是否已经发现鸟,前面所写的所有代码都是基于终端(或称之为console控制台)模式,我们有时希望编写窗口下的obj-c程序哦.Cocoa是一种为os x应用程序提供丰富用户体验的框架,实际上由3个框架组成: 1 基本类Foundation框架 2 便于数据库存储和管理数据的Core Data框架 3 提供窗口.视图.文档以及和多用户界面相关类的Ap

Win7下载时频繁掉线的解决方法

用上Windows7后,笔者发现一个问题:使用下载软件(如旋风.快车)下载时,时间长了就会自动停止,下载软件会处于掉线状态.经过摸索后,才明白原来是网卡电源设置问题造成的.如果你也遇到过类似问题,可通过如下方法解决. 进入控制面板,单击"网络和Internet"选项,然后单击"网络和共享"中心,再单击左侧的"更改适配器设置"按钮,右击"本地连接"选择"属性"出现对话框,单击"配置"按钮按

IE下载时提示 无法复制文件 无法读源文件或磁盘的解决办法

  今天在用IE7下载时,提示:无法复制文件 无法读源文件或磁盘 搞不懂哪里出错了,一开始以为硬盘坏了...不过终于花了10几分钟搞定! 如果有遇到此问题的朋友,看看下面我的操作即可解决. 也可能是服务器提供的文件正在使用,或确实是服务器无法连接跟个人机器无关,可以换个地址试试,实在不行就换个浏览器试试.(例如 搜狗 360等都可以)

迅雷无法下载怎么办 安装了迅雷下载时却弹出警告

很多同学在用迅雷下载时出现如下警告,明明已经安装了迅雷却不能下载,这是什么原因呢?不知道的同学就来看看本文介绍吧. 一.打开迅雷软件,点击下图中的按钮,选择迅雷下载诊断工具. 二.检测下载异常问题,点击修复浏览器支持项. 启用360浏览器的迅雷组件及修复迅雷ie支持组件,重启浏览器后即可.

当电脑通过IE浏览器下载时如何屏蔽弹出迅雷下载

  我们有时候会在网上下载一些软件或者文件资料,有些用户习惯直接通过IE浏览器进行下载,但总是会自动弹出迅雷下载窗口.如果是在上述的情况下,我们可以参考以下方法在IE浏览器中屏蔽弹出迅雷下载. 方法一: 1.打开迅雷软件,打开菜单,进入设置中心; 2.在"浏览器新建任务"选项中,取消勾选下方的浏览器选项,保存设置. 方法二: 1.打开IE浏览器,点击打开右上角的菜单; 2.在下拉菜单中点击"管理加载项"; 3.在加载项列表中找到"迅雷下载支持",