我对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。
是什么原因造成的?