ios - 后台线程调用属性并返回nil

时间:2012-06-11 21:49:07

标签: ios

我是IOS编程的新手。 我创建了一个类,它使用NSURLConnection下载数据异步。

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

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

MyClass的:

@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。

可能导致什么?

0 个答案:

没有答案