应用程序在后台崩溃与EXC_BAD_ACCESS

时间:2013-02-22 12:15:37

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

我在头文件中设置NSString *oldChat,如下所示:

@interface CTFChatViewController : UIViewController {
    NSString *oldChat;
}
- (void)updateChat;
@property (nonatomic, retain) NSString *oldChat;

@end

然后我用它:

- (void)updateChat
{
    NSString *chat = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://theshay.byethost7.com/chat.php"] encoding:NSUTF8StringEncoding error:nil];
    if (![chat isEqual:oldChat]) 
    {
        [webView loadHTMLString:chat baseURL:nil];
        oldChat = chat;
    }

    [self performSelectorInBackground:@selector(updateChat) withObject:nil];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    NSString *chat = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://theshay.byethost7.com/chat.php"] encoding:NSUTF8StringEncoding error:nil];
    oldChat = chat;
    [webView loadHTMLString:chat baseURL:nil];

    [self performSelectorInBackground:@selector(updateChat) withObject:nil];
}

应用程序因if (![chat isEqual:oldChat])错误导致EXC_BAD_ACCESS崩溃。 为什么它崩溃了?

(XCode 4.5.2,iPhone Simulator 6.0,Base SDK 6.0)

2 个答案:

答案 0 :(得分:1)

oldChat是autorelease个对象。保留它并使用isEqualToString进行字符串比较。

 NSString *chat = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://theshay.byethost7.com/chat.php"] encoding:NSUTF8StringEncoding error:nil];
 oldChat = chat;
[oldChat retain];

答案 1 :(得分:0)

您必须使用isEqualToString:方法检查您的NSString是否相等。你的代码应该是这样的

if (![chat isEqualToString:oldChat]){
    //Do something
}