0

我用 NSOperation 和 NSOperationQueue 建立了一个测试项目。只有一个文本框:@property (weak) IBOutlet NSTextField *textbox;

在后台执行此操作:

- (void)main
{
    NSURL *url = [NSURL URLWithString:@"http://google.com"];
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    [request startSynchronous];
    NSError *error = [request error];
    if (!error) {
        NSString *response = [request responseString];
        NSLog(@"MainThread: %@", ([NSThread isMainThread] ? @"YES" : @"NO"));
        [[AppDelegate sharedManager] performSelectorOnMainThread:@selector(pageLoaded:)
                                           withObject:response
                                        waitUntilDone:NO];
}

以及在主线程上调用的选择器:

- (void)pageLoaded:(NSString*)document
{
    [textbox setStringValue:document]; // does nothing
    NSLog(@"Textbox: %@", textbox); // returns nil
}

为什么文本框返回零?

4

1 回答 1

0

嗯,我有两个想法:

  1. 一个现实的:[AppDelegate sharedManager]从你调用applicationDidFinishLaunching的对象返回不同的对象。如果将 AppDelegate 添加到 XIB + 你有一个单独的单例实例,这是可能的。
  2. 一个神秘的:只有一个 AppDelegate,但属性值不知何故无效。如果是这种情况,解决问题的最简单方法是将“弱”更改为“分配”(以确定它是否正在发布问题),而不是重新定义setTextbox以查找谁调用它。

但我敢打赌它是#1。

于 2012-08-30T11:52:28.700 回答