1

Mac OS X で単純な NSString に問題があります。

NSString *letters = @"abcdefghijklmnopqrstuvwxyz0123456789";
myString = [myString stringByAppendingFormat:@"%c", [letters characterAtIndex:3]];

この文字列に再度アクセスしようとすると、Xcode が返されEXC_BAD_ACCESS ます このエラーは、@"%c" という形式を使用している場合に発生します @"%@" を使用している場合、同じエラーが発生することもあれば、この文字列control 0x10040a480:時々これ:

{(
    <CFRunLoopObserver 0x10015ac60 [0x7fff70731ee0]>{locked = No, valid = Yes, activities = 0x21, repeats = Yes, order = 0, callout = _ZL15FlushAllBuffersP19__CFRunLoopObservermPv (0x7fff88a147d4), context = <CFRunLoopObserver context 0x0>}
)}

コードを何も変更せずに再実行しても、エラーはランダムに発生します。

次のようにして、ランダムな文字列を取得しようとします。

randomString = @"";
    NSString *letters = @"abcdefghijklmnopqrstuvwxyz0123456789";
    srand(time(NULL));
    for (int i=0; i<5; i++)
    {
        randomString = [randomString stringByAppendingFormat:@"%c", [letters characterAtIndex:(rand()%[letters length])]];
    }

randomString は header.h で宣言されています NSMutableString を使用してみましたが、それもうまくいきませんでした。文字列(または変更可能な文字列)にアクセスしようとするたびに、@"%@"取得していますEXC_BAD_ACCESS

何か案が?誰かが私を助けてくれることを願っています!

よろしく、ジュリアン

4

2 に答える 2

0

問題は、myStringアクセスする前に自動解放されることです。

変更する必要があります:

myString = [myString stringByAppendingFormat:@"%c", [letters characterAtIndex:3]];

に:

myString = [[myString stringByAppendingFormat:@"%c", [letters characterAtIndex:3]] retain];

使い終わったら実行することを忘れないでください[myString release];

于 2011-11-20T15:17:36.170 に答える
0

これは私のために働きます:

ファイルの先頭に文字を定義します。

#define letters @"abcdefghijklmnopqrstuvwxyz0123456789"

次に、次のようなランダムな文字を追加します。

NSString *randomString = @"";

for (int i = 0; i < 5; i++) 
{
    UInt64 index = rand() % [letters length];
    NSString *randomCharacter = [letters substringWithRange: NSMakeRange(index, 1)];
    randomString = [randomString stringByAppendingString:randomCharacter];
}

NSLog(@"%@", randomString);
于 2011-11-20T15:26:22.757 に答える