2010-05-18 48 views
3

每当我尝试访问此循环中的“url”变量时,为什么会收到“超出范围”错误?迭代NSMutableArray时出现“超出范围”错误

for(NSString *url in self.winnerImageURLs) { 
     [mediaItemString appendFormat:@"{\"type\":\"image\",\"src\":\"%@\",\"href\":\"%@\"},", url, url]; 
    } 

在“self.winnerImageURLs”之类非常项目的NSMutableArray回来为NSCFString所以我不知道该dealio是在这里。

关于我在做什么错误的任何想法?

谢谢

+1

听起来像一个调试器怪癖。你有没有尝试过使用NSLog来确定你正在构建的字符串是否正确? – warrenm 2010-05-18 02:06:14

+0

是的。当我将NSString添加到可变数组中并在调试器中确保在NSCFString类型的数组中存在单个元素时,NSLog有过。 – wgpubs 2010-05-18 02:18:06

+1

我不确定我是否理解这个问题。如果您关心类型本身,NSCFString是NSString和CFString实例的底层运行时类型,以支持Cocoa框架之间的桥接。 – warrenm 2010-05-18 02:51:40

回答

1

如果你谈论的是在调试器访问URL变量,它发生了不少。这本身并不是问题。

1

短的是它应该是这样的。较长的答案是NSString是一个类集群。

类簇

类簇是一种体系结构 该基团的公共下一些私人, 具体子类, 抽象超类。以这种方式分组的 类别为用户提供简化的界面,其仅为公众可见的 体系结构。在幕后, 虽然,抽象类呼叫 上最适合 执行特定任务的私人子类。

许多常见Cocoa类被实现为类簇,包括NSArrayNSString,和NSDictionary

您可以像创建任何其他类一样创建集群实例并与其进行交互。但在幕后,当您创建公共类的实例时,该类基于您调用的创建方法返回适当子类的对象。 (你不这样做,而不能选择实际的类实例的。)

NSString的例子

NSString *a = @"UTF32.txt"; 

NSString *b = [NSHomeDirectory() stringByAppendingPathComponent:a]; 

NSTextStorage *storage = [[NSTextStorage alloc] initWithString:b]; 

NSString *c = [storage string]; 

每一个,b和c可以(和10.5)一个不同的私有子类的实例(事实上,在Mac OS X v10.5上,每个都是)。尽管每个对象都是NSString的私有子类,但将每个对象视为NSString类的实例都很方便。

关于类集群在苹果开发者网站:http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html#//apple_ref/doc/uid/TP40002974-CH4-SW34