предупреждение: попытка создать USE_BLOCK_IN_FRAME - PullRequest
0 голосов
/ 01 марта 2012

Я получаю это предупреждение в Xcode

предупреждение: попытка создать переменную USE_BLOCK_IN_FRAME с блоком это не в кадре.

Xcode перенаправить меня на мой NSStream

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

Это случайно, когда он делает эту ошибку, и мое приложение аварийно завершает работу, когда оно срабатывает. Кто-нибудь пробовал подобную проблему?

спасибо

EDIT

в приложении Delegate.h

@property (nonatomic, strong) NSInputStream *naturStream;

В приложении Delegate.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] Я не знаю, решил это проблему или нет?

EDIT

Другое дело, .... Я использую Thread для извлечения данных 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 Ответ

1 голос
/ 01 марта 2012

Звучит так, как будто вы используете 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;

Затем получить доступ к ним непосредственно из вашего окончательного обработчика завершения, который вы отправляете обратно в основную очередь.

...