0

我对Objective-C真的很陌生。

首先请看代码:

这是财产:

@property (atomic) IBOutlet NSTextView *txtResponse;

这是行动:

- (IBAction)sendReq:(id)sender {
    @synchronized(self)
    {
        request *req = [[request alloc] init];

        voidCallback callback = ^(NSURLResponse *resp,  NSData *data, NSError *error) {
            NSString *val = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

            [self.txtResponse setString:val];
            //NSLog(val);
        };

        [req setUrl:[[NSURL alloc] initWithString:@"http://foo.bar"]];

        [req setCallback:callback];

        [req send];
    }
}

当我尝试使用时 UI 冻结[self.txtResponse setString:val];
我也尝试了没有问题的代码@synchronized(self)
问题出在哪里?
提前致谢!

4

1 回答 1

0

我使用objective-c的第三天,终于找到了答案:)

我使用performSelectorOnMainThread并解决了问题

- (IBAction)sendReq:(id)sender {

    request *req = [[request alloc] init];

    voidCallback callback = ^(NSURLResponse *resp,  NSData *data, NSError *error) {
        NSString *val = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

        [self performSelectorOnMainThread:@selector(setResponseValue:) withObject:val waitUntilDone:NO];
    };

    [req setUrl:[[NSURL alloc] initWithString:@"http://programming.com"]];

    [req setCallback:callback];

    [req send];
}

- (void)setResponseValue:(NSString *)resp
{
    [self.txtResponse setString:resp];
    //NSLog(resp);
}
于 2013-08-24T12:08:06.897 回答