1

の重複:

https://stackoverflow.com/questions/17037149/ios-parse-com-app-crashes-while-retrieve-data-from-cache-nsinternalinconsiste

Parse.com を使用して iOS アプリを実装しました

キャッシュから取得しようとしています。

キャッシュからデータを取得しているときに、次のようなエラーが発生しました。

キャッチされない例外 'NSInternalInconsistencyException' が原因でアプリを終了しています。理由: 'このクエリには未解決のネットワーク接続があります。完了するまで待つ必要があります。

問題を参照すると、次のことがわかりました。

最初の完了を待たずに同じクエリ オブジェクトに対して 2 つのクエリ呼び出しを行ったことが原因で発生する可能性があると示唆する人もいました。

このアプリでこれらの同時呼び出しを回避する方法

  1. クエリ setLimit: 制限]; [クエリ setSkip: スキップ];

        //RETRIEVING FROM CACHE
         query.cachePolicy = kPFCachePolicyCacheThenNetwork;
    
        [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
            if (!error)
            {
                [allObjects removeAllObjects]; //Added regarding cache ******
    
                // The find succeeded. Add the returned objects to allObjects
                [allObjects addObjectsFromArray:objects];
    
                if (objects.count == limit) {
                    // There might be more objects in the table. Update the skip value and execute the query again.
                    skip += limit;
                    [query setSkip: skip];
                    // Go get more results
                    weakPointer();
                }
                else
                {
                    // We are done so return the objects
                    block(allObjects, nil);
                }
    
            }
            else
            {
                block(nil,error);
            }
        }];
    
4

2 に答える 2

0

気をつけろ:

[query cancel];

コールバックを期待している場合は機能しません。

解決:

@property (nonatomic) BOOL isCurrentlyFetching; // Makes sure Parse is called only

-(void)myQuery
{

    if (_isCurrentlyFetching) { return; } // Bails if currently fetching
    _isCurrentlyFetching = YES;

    //RETRIEVING FROM CACHE
     query.cachePolicy = kPFCachePolicyCacheThenNetwork; // Whatever your cache policy is

    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {

        if (!error){
            // Your code...
        }
        else{
            // Your code...
        }

        _isCurrentlyFetching = NO;

    }];
}
于 2015-07-01T15:20:45.673 に答える
0

PFQuery の同時呼び出しを避けるために、call [query cancel]beforefindObjectsが呼び出されます。

query.cachePolicy = kPFCachePolicyCacheThenNetwork;
[query cancel]; //cancels the current network request being made by this query (if any)
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    //do stuff
}];
于 2014-01-24T05:53:00.470 に答える