【问题标题】:NSString problemsNSString 问题
【发布时间】:2011-11-20 14:59:25
【问题描述】:

我在 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])]];
    }

随机字符串在 header.h 中声明 我也尝试使用 NSMutableString 但这也不起作用。 每次我尝试通过@"%@" 访问字符串(或可变字符串)时,我都会收到EXC_BAD_ACCESS

有什么想法吗? 希望有人可以帮助我!

您好, 朱利安

【问题讨论】:

    标签: string random nsmutablestring


    【解决方案1】:

    您的问题是myString 在您访问它之前会自动释放。

    你需要改变:

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

    到:

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

    完成后记得运行[myString release];

    【讨论】:

    • 谢谢,这真的很有帮助!我什么时候必须释放它?当我完成定义后,我是否仍然必须让它们未发布,直到我不再需要它们(当应用程序终止时)?
    【解决方案2】:

    这对我有用:

    在文件顶部定义字母:

    #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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-28
      • 2013-09-11
      • 2015-09-13
      • 1970-01-01
      相关资源
      最近更新 更多