2011-10-23 8 views
1

私は、次のコードを持っているを示します。私はそれが[tempの長さ]ビットで誤っていると仮定します。変わったことは、私は一時的にNSStringの他のメソッドを行うことができ、彼らは[temp characterAtIndex:0]のようにうまくいきます。NSString.lengthはEXC_BAD_ACCESS

私も[[array objectAtIndex:i] retain];をやってみましたが、それは役に立たないようです。

なぜこのエラーが発生するのですか?


編集:それは、%@の代わり%のLUだったので、それはのNSLogでクラッシュしていましたが判明しました。実際の問題は、私がこの記事から省略した他のコードでした。もう少し周りを遊んだ後、私はそれを働かせました。

+0

あなたの質問に答えたことを考慮して、回答を正しいとマークすることをお勧めします。 –

答えて

9

私の理解から、 "%@"プレースホルダはオブジェクトポインタ用であり、 "length"はポインタではない "NSUInteger"を返します。 "%@"の代わりに "%lu"を試してください。

+0

これで修正されませんでした...しかし面白いことに、関数呼び出しが実際には行自体ではなく、エラーが発生しました。 Xcodeは%dの代わりに%luを提案しましたが、どちらも同じことでした。 – Cole

2

この(少しクリーンアップ)バージョン私の作品:thg435言及し、「%の@」として

NSError *error = nil; 
    NSString *path = [@"~/Desktop" stringByExpandingTildeInPath]; 
    NSArray *array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath: 
     path error:&error]; 
    if (error) NSLog(@"%@", error); 

    for (NSString *path in array) { 
     NSLog(@"Path length = %lu", path.length); 
    } 

は、オブジェクトポインタのためである、あなたはそれを任意の番号を渡すので、もしそれがメモリアクセスエラーがスローされます。