0

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 模拟器 6.0、基础 SDK 6.0)

4

2 回答 2

1

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

 NSString *chat = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://theshay.byethost7.com/chat.php"] encoding:NSUTF8StringEncoding error:nil];
 oldChat = chat;
[oldChat retain];
于 2013-02-22T12:23:27.303 回答
0

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

if (![chat isEqualToString:oldChat]){
    //Do something
}
于 2013-02-22T12:22:20.200 回答