Iphone Parse.com+iOS避免同时调用PFQuery以避免nsinternalinconsistenceexception错误崩溃

Iphone Parse.com+iOS避免同时调用PFQuery以避免nsinternalinconsistenceexception错误崩溃,iphone,objective-c,parse-platform,Iphone,Objective C,Parse Platform,副本: 已经使用Parse.com实现了一个iOS应用程序 正在尝试从缓存中检索 从缓存检索数据时,我遇到如下错误: 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“此查询具有未完成的网络连接。你必须等到它完成。” 当我浏览这些问题时,我发现: 一些人认为,这可能是由于在同一查询对象上进行两次查询调用而没有等待第一次调用完成 如何在此应用程序中避免这些同步呼叫 查询设置限制:限制]; [查询设置跳过] //RETRIEVING

副本:

已经使用Parse.com实现了一个iOS应用程序

正在尝试从缓存中检索

从缓存检索数据时,我遇到如下错误:

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“此查询具有未完成的网络连接。你必须等到它完成。”

当我浏览这些问题时,我发现:

一些人认为,这可能是由于在同一查询对象上进行两次查询调用而没有等待第一次调用完成

如何在此应用程序中避免这些同步呼叫

查询设置限制:限制]; [查询设置跳过]

    //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);
        }
    }];

要避免同时调用PFQuery,请在调用findObjects之前调用[query cancel]:

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
}];
小心:

[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;

    }];
}

出于某种原因,这对我不起作用。见下文: