1

我对IOS编程很陌生。我创建了一个类,它使用 NSURLConnection 异步下载数据。

我使用一个发送过来的委托,然后更新我的父亲类。更新父类的一部分包括调用已保存在本地属性中的 UIView。

以下是我的意思的一些代码示例:

我的课:

@synthesize myView = _myView;

-(void) loadMetaData
{
    if(self.isMetadataLoaded)
    {
        [self.myView metadataLoaded];
    }
    else {
        [_htmlLinter summarizeUrl:self.originalLink];
    }
}

-(void) urlSummarized:(NSDictionary*)data
{
    self.productTitle = [data objectForKey:@"title"];
    self.productDescription = [data objectForKey:@"description"];
    self.provider = [data objectForKey:@"provider_name"];
    self.isMetadataLoaded= true;
    [self.myView metadataLoaded];
}

htmlLinter:

-(void)summarizeUrl:(NSString*)url
{
    NSURL* u = [[NSURL alloc] initWithString:request];
    ...
    ...
    ...
    //removed a lot of logic that doesn't seem to be relevant 
    //Important to notice, that this is being called on a different thread though:
    [self embedlyDidLoad:result];
}

-(void) embedlyDidLoad:(id)result
{
    NSDictionary* properties = (NSDictionary*)result;
    [_facilitator urlSummarized:properties];
}

奇怪的是:当通过另一个线程访问时,myClass 不记得 self.myView 是什么。这一行是有问题的:[self.myView metadataLoaded];

它在 loadMetaData 中最初调用时返回一个有效指针,但是当我在 urlSummarized 中的另一个线程上调用它时,它为 nil。

是什么原因造成的?

4

0 回答 0