我在Xcode中收到此警告
警告:尝试使用块创建USE_BLOCK_IN_FRAME变量 那不在框架中。
Xcode将我重定向到我的NSStream
_naturStream = [[NSInputStream alloc] initWithData:natur];
当它发生此错误时它是随机的,并且我的应用程序在触发时崩溃。有人试过类似的问题吗
感谢
@property (nonatomic, strong) NSInputStream *naturStream;
在appDelegate.m中:
NSData *natur = [NSData dataWithContentsOfURL:[NSURL URLWithString:_locString]];
_naturStream = [[NSInputStream alloc] initWithData:natur];
[_naturStream open];
if (_naturStream) {
NSError *parseError = nil;
id jsonObject = [NSJSONSerialization JSONObjectWithStream:_naturStream options:NSJSONReadingAllowFragments error:&parseError];
if ([jsonObject respondsToSelector:@selector(objectForKey:)]) {
for (NSDictionary *natur in [jsonObject objectForKey:@"results"]) {
_poi = [[POI alloc]init];
[_poi setTitle:[natur objectForKey:@"title"]];
[_poi setLat:[[natur objectForKey:@"lat"]floatValue]];
[_poi setLon:[[natur objectForKey:@"lng"]floatValue]];
[_poi setDistance:[natur objectForKey:@"distance"]];
[_poi setWebUrl:[natur objectForKey:@"webpage"]];
[_naturArray addObject:_poi];
}
}
}
else {
NSLog(@"Failed to open stream.");
}
[_naturStream close];
}
我意识到我忘了[_naturStream close]
我不知道它是否已经解决了这个问题?
另一件事,....我使用一个线程来获取JSON数据:
dispatch_queue_t jsonParsingQueue = dispatch_queue_create("jsonParsingQueue", NULL);
// execute a task on that queue asynchronously
dispatch_async(jsonParsingQueue, ^{
[self parseJSON];
dispatch_async(dispatch_get_main_queue(), ^{
[_kortvisning updateAnno];
[visListe updateList];
});
});
// release the dispatch queue
dispatch_release(jsonParsingQueue);
答案 0 :(得分:1)
听起来像是在使用ARC - 如果_naturStream是目标C类的实例变量,您可能需要将其拉出并添加__block
引用,以便ARC正确了解范围 - 但是我猜测是因为我没有看到该块如何与NSInputStream一起使用(如果你发布我们可能知道的部分)。这里有一点点:http://nachbaur.com/blog/using-gcd-and-blocks-effectively
- 编辑 -
好的,既然您发布了其余内容,我敢打赌它与_kortvisning
和visListe
变量有关。我想你想在创建类似
__block KortVisning *localKortVisning = _kortvisning;
__block NSMutableArray *localVisListe = visListe;
然后直接从您发送回主队列的最终完成处理程序中访问它们。