使用nsstring时获取EXC_BAD_ACCESS

时间:2012-04-28 06:45:00

标签: ios iphone objective-c exc-bad-access

我在4小时内变得疯狂,我真的需要帮助。这是代码:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    //check if strGroup has prefix and suffix #
    BOOL result;

    result = [strGroup hasPrefix: @"#"];

    if (result)
    {
        result = [strGroup hasSuffix: @"#"];

        if (result)
        {

            NSMutableString* string = [NSMutableString stringWithString: strGroup];
            str = [strGroup substringWithRange: NSMakeRange (1, [string length]-2)];

            strToHoldAllContact = [NSString stringWithFormat:@"%@",str];
        }
    }
    NSLog(@"strToHoldAllContact=%@",strToHoldAllContact);
}

我正确地获得了strToHoldAllContact的价值。但是当我尝试从另一种方法访问strToHoldAllContact时,我收到错误:

[CFString respondsToSelector:]: message sent to deallocated instance 0x856f2a0

4 个答案:

答案 0 :(得分:1)

使用

strToHoldAllContact = [NSString stringWithFormat:@"%@",str];
[[strToHoldAllContact retain] autorelease];

忘了发布。

答案 1 :(得分:0)

在初始化或设置字符串的地方执行此操作[strToHoldAllContact retain];并且在完成使用后不要忘记将其释放

答案 2 :(得分:0)

只需替换

strToHoldAllContact = [NSString stringWithFormat:@"%@",str];

strToHoldAllContact = [[NSString alloc] initWithFormat:@"%@",str];

在你不再需要它之后释放它。

答案 3 :(得分:0)

使用ARC,在.h中将strToHoldAllContact声明为:

@property(strong) NSString *strToHoldAllContact;
<。>在.m中,使用它(在@synthesize之后)为self.strToHoldAllContact = [NSString stringWithFormat:@"%@",str]; 这样你就不会有问题。

没有ARC,在.h中声明strToHoldAllContact为:

@property(retain) NSString *strToHoldAllContact;

并使用与ARC in.m文件相同的方式。