1

私はバージョン 1.6.5 を使用するプロジェクトをparse行っいますlocalDataStoreAppDelegatelocalDatastore

[Parse enableLocalDatastore];
[Parse setApplicationId:@"AppId" clientKey:@"ClientKey"];

ViewControllerの場合、アプリが初めて実行されるかどうか、サーバーから取得してすべてのオブジェクトをローカルに固定するかどうかという条件があります。localDatastoreそれ以外の場合は、コードから取得します

if ([self isAppLaunchingForFirstTime]) {
    PFQuery *query = [PFQuery queryWithClassName:@"Category"];
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error){
        if (error) {
            [[[UIAlertView alloc]initWithTitle:@"Failed!" message:@"error" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil] show];
        } else {
            if (objects.count) {
                [self.categoryArray addObject:objects];
                [self.collectionView reloadData];
                [PFObject pinAllInBackground:objects block:^(BOOL succeeded, NSError *error) {
                    if (succeeded) {
                        NSLog(@"Pinned successfully");
                    }else {
                        [[[UIAlertView alloc]initWithTitle:@"Error" message:@"Pinning" delegate:self cancelButtonTitle:@"Okay" otherButtonTitles:nil] show];
                    }
                }];                    
            } else {
                [[[UIAlertView alloc]initWithTitle:@"Alert!" message:@"No Records" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil] show];
            }
        }
    }];
} else {
    PFQuery *query = [PFQuery queryWithClassName:@"Category"];
    [query fromLocalDatastore];
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error){
        if (error) {
            [[[UIAlertView alloc]initWithTitle:@"Failed!" message:error.description delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil] show];
        } else {
            if (objects.count) {
                [self.categoryArray addObject:objects];
                [self.collectionView reloadData];
            } else {
                [[[UIAlertView alloc]initWithTitle:@"Alert!" message:@"No Records" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil] show];
            }
        }
    }];
}

問題は、最初のアプリが正常に実行され、collectionView に取得されたオブジェクトが表示されるのに対し、2 回目からはlocalDataStore、ネットワーク接続を確認し、各オブジェクトを取得するために 5 回再試行するため、取得中にバックグラウンド タスクが長時間実行されます。ネットワークlocalDataStore接続が必要です。

コンソールのエラーログ : これは、7 つのオブジェクトを取得するために 36 回繰り返し発生したエラーです。

[Error]: Error Domain=NSURLErrorDomain Code=-1009 "The Internet connection appears to be offline." UserInfo=0x1e56e2a0 
{NSErrorFailingURLStringKey=https://api.parse.com/1/classes/Category, 
NSErrorFailingURLKey=https://api.parse.com/1/classes/Category,
NSLocalizedDescription=The Internet connection appears to be offline.,
NSUnderlyingError=0x1e57fae0 "The Internet connection appears to be offline."}
(Code: 100, Version: 1.6.5)
4

2 に答える 2