0

我在 Xcode 中收到此警告

警告:尝试使用不在框架中的块创建 USE_BLOCK_IN_FRAME 变量。

Xcode 将我重定向到我的 NSStream

_naturStream = [[NSInputStream alloc] initWithData:natur];

出现此错误时是随机的,并且我的应用程序在触发时崩溃。有人试过类似的问题吗?

谢谢

编辑

在 appDelegate.h

@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);
4

1 回答 1

1

听起来您正在使用 ARC - 如果 _naturStream 是目标 C 类的实例变量,您可能需要将其拉出并添加一个__block引用,以便 ARC 正确知道范围 - 但我猜是因为我没有看到该块如何与 NSInputStream 一起使用(如果您发布我们可能知道的那部分)。好一点在这里: http: //nachbaur.com/blog/using-gcd-and-blocks-effectively

- 编辑 -

好的,既然您发布了其余部分,我敢打赌它与_kortvisningandvisListe变量有关。我认为您想在创建队列后立即将其拉出,例如

__block KortVisning *localKortVisning = _kortvisning;
__block NSMutableArray *localVisListe = visListe;

然后直接从您发送回主队列的最终完成处理程序中访问那些。

于 2012-03-01T13:15:22.423 回答