3

このループで「url」変数にアクセスしようとすると、「範囲外」エラーが発生するのはなぜですか?

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

「self.winnerImageURLs」NSMutableArray内の非常にアイテムのクラスはNSCFStringとして返されるため、ここでの取引が何であるかはわかりません。

私が間違っていることについてのアイデアはありますか?

ありがとう

4

2 に答える 2

1

デバッガーでurl変数にアクセスすることについて話している場合、それはかなり頻繁に発生します。それ自体は問題ではありません。

于 2010-05-18T09:44:48.547 に答える
1

短い答えは、それがそのようになっているということです。より長い答えは、それ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

Apple Developerサイトのクラスクラスタについて:http: //developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html#//apple_ref/doc/uid/TP40002974-CH4-SW34

于 2010-05-18T05:27:14.327 に答える