2014-11-04 18 views
0

我正在开发一个推荐的iphone应用程序。它使用Parse来维护用户,联系人和引荐。它还使用核心数据与分析和维护离线活动同步。它有一个刷新方法,可以将Parse和Core Data同步。我试图找到一种方式,只要用户离开应用程序,与Parse同步在后台完成。我一直在使用applicationDidEnterBackground中的简单分析查询进行测试,但无法正常工作。这里是我使用的代码:如何使用解析实现后台进程

(void)applicationDidEnterBackground:(UIApplication *)application{ 

    self.backgroundTask = [application beginBackgroundTaskWithName:@"MyTask" expirationHandler:^{ 
     [application endBackgroundTask:self.backgroundTask]; 
     self.backgroundTask = UIBackgroundTaskInvalid; 
    }]; 

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

     NSString *message = @"begin background task"; 
     NSDictionary *dict = @{@"status": message}; 
     [[NSUserDefaults standardUserDefaults] setObject:dict forKey:kBeginBackgroundTaskWithNameKey]; 

     PFQuery *query = [PFQuery queryWithClassName:@"Referral"]; 

     [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
      if (!error) { 
       NSString *message = [NSString stringWithFormat:@"array has %lu objects", (unsigned long)objects.count]; 
       NSDictionary *dict = @{@"status": message}; 
       [[NSUserDefaults standardUserDefaults] setObject:dict forKey:kBeginBackgroundTaskWithNameKey]; 

       [application endBackgroundTask:self.backgroundTask]; 
       self.backgroundTask = UIBackgroundTaskInvalid; 
      } 

     }];  
    }); 
} 

我在做什么错?

回答

0

我终于找到了解决我的问题的方法。我使用Ray Wenderlich教程“iOS中的背景模式”获取指导http://www.raywenderlich.com/29948/backgrounding-for-ios。在这里,在AppDelegate中的主要变化:

- (无效)parseSync {

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

    // Parse code .... 

}); 


self.backgroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ 
    NSLog(@"Background handler called. Not running background tasks anymore."); 
    [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask]; 
    self.backgroundTask = UIBackgroundTaskInvalid; 
}]; 

}

  • (无效)applicationWillResignActive:(UIApplication的*)应用{

    [自parseSync ]。

}