警告:尝试创建USE_BLOCK_IN_FRAME

时间:2012-03-01 12:41:08

标签: ios warnings nsstream

我在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);

1 个答案:

答案 0 :(得分:1)

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

- 编辑 -

好的,既然您发布了其余内容,我敢打赌它与_kortvisningvisListe变量有关。我想你想在创建类似

的队列后立即将它们拉出来
__block KortVisning *localKortVisning = _kortvisning;
__block NSMutableArray *localVisListe = visListe;

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