2

次のようなNSDictionariesの配列を通過するためのブロックベースの列挙セットアップがあります。

__block NSURL *contentURL;

 //This method of enumerating over the array gives the bad_access error
[documents enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

    NSString *aName = [(NSDictionary *)obj objectForKey:@"Name"];

    if([aName isEqualToString:name]) {

        contentURL = [NSURL URLWithString:[(NSDictionary *)obj objectForKey:@"Content"]];
        *stop=YES;
    }
}];

NSLog(@"Content URL for issue with name %@ is %@", name, contentURL);

contentURLこのメソッドを使用すると、NSLog ステートメントで出力しようとするとEXC_BAD_ACCESS エラーが発生します。

ただし、次のように配列を列挙します。

NSURL *contentURL;

//This method of enumerating over the array works fine
for (NSDictionary *obj in documents) {

    NSString *aName = [obj objectForKey:@"Name"];

    if([aName isEqualToString:name]) {

        contentURL = [NSURL URLWithString:[obj objectForKey:@"Content"]];

    }
}

NSLog(@"Content URL for issue with name %@ is %@", name, contentURL);

すべて正常に動作します。どうしてこれなの?

4

2 に答える 2

0

あなたが言うようにARCを使用している場合、あなたが示すコードはあなたが説明する問題を引き起こすことはできません。他の場所に問題があるか、コードが説明どおりではありません。

于 2013-07-25T04:14:48.917 に答える