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]問題が解決したかどうかわからないことを忘れていたことに気付きましたか?

編集

もう 1 つ....JSON データを取得するために Thread を使用します。

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クラスのインスタンス変数である場合、__blockARCがスコープを正しく認識できるように、それを引き出して参照を追加する必要があるかもしれません-しかし、私は見ていないので推測していますブロックが NSInputStream でどのように使用されるか (その部分を投稿すると、わかるかもしれません)。ここに良いビットがあります:http://nachbaur.com/blog/using-gcd-and-blocks-effectively

- 編集 -

わかりました、残りを投稿したので、変数_kortvisningvisListe変数に関係していると思います。次のようなキューを作成した直後にそれらを引き出したいと思います

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

次に、メイン キューに送り返す最終完了ハンドラーから直接アクセスします。

于 2012-03-01T13:15:22.423 に答える