我是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。
可能导致什么?