【问题标题】:"out of scope" error when iterating an NSMutableArray迭代 NSMutableArray 时出现“超出范围”错误
【发布时间】:2010-05-18 01:42:00
【问题描述】:

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

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

“self.winnerImageURLs”NSMutableArray 中非常项目的类以 NSCFString 形式返回,所以我不确定这里的交易是什么。

关于我做错了什么有什么想法???

谢谢

【问题讨论】:

  • 听起来像是调试器的怪癖。您是否尝试过使用 NSLog 来确定您正在构建的字符串是否正确?
  • 是的。当我将 NSString 添加到可变数组中时,NSLog 是否......并且在调试器中确保 NSCFString 类型的数组中有一个元素。
  • 我不确定我是否理解问题所在。如果你关心类型本身,NSCFString 是 NSString 和 CFString 实例的底层运行时类型,以支持 Cocoa 框架之间的桥接。

标签: iphone objective-c xcode iphone-sdk-3.0 class-cluster


【解决方案1】:

如果您谈论的是在调试器中访问 url 变量,这种情况经常发生。这本身不是问题。

【讨论】:

    【解决方案2】:

    简短的回答是它应该是这样的。更长的答案是NSString 是一个类簇。

    类集群

    类集群是一种架构 将一些私人分组, 公共下的具体子类, 抽象超类。的分组 以这种方式提供的类 简化的用户界面,谁 只看到公开可见的 建筑学。在幕后, 但是,抽象类正在调用 最适合的私有子类 用于执行特定任务。

    许多常见的Cocoa 类都实现为类集群,包括NSArrayNSStringNSDictionary

    您可以像创建任何其他类一样创建集群实例并与之交互。但是,在幕后,当您创建公共类的实例时,该类会根据您调用的创建方法返回相应子类的对象。 (你没有也不能选择实例的实际类。)

    NSString 示例

    NSString *a = @"UTF32.txt";
    
    NSString *b = [NSHomeDirectory() stringByAppendingPathComponent:a];
    
    NSTextStorage *storage = [[NSTextStorage alloc] initWithString:b];
    
    NSString *c = [storage string];
    

    a、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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-16
      • 1970-01-01
      • 2013-10-29
      • 2018-01-30
      • 1970-01-01
      • 1970-01-01
      • 2010-12-20
      相关资源
      最近更新 更多