NSString проблемы - PullRequest
       9

NSString проблемы

1 голос
/ 20 ноября 2011

У меня проблемы с простой строкой NSString в Mac OS X:

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

Есть идеи? Надеюсь, кто-нибудь может мне помочь!

Поздравил, Julian

Ответы [ 2 ]

0 голосов
/ 20 ноября 2011

это работает для меня:

определить буквы вверху файла:

#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);
0 голосов
/ 20 ноября 2011

Ваша проблема в том, что myString автоматически высвобождается, прежде чем вы получите к нему доступ.

Вам нужно изменить:

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

до:

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

Не забудьте запустить [myString release];, когда закончите.

...