Objective c 在iOS7中实现应用图标徽章后台提取时核心数据表被删除
我正在尝试在我的AppDelegate.m中实现一个后台抓取,通过RestKit(此处未显示)从web服务中提取最新记录计数,从而获取应用图标徽章以反映更新的记录计数。当我在Xcode中模拟BackGroundFetch时,一切正常。当后台抓取在我的iPhone 5S上运行时,我的整个表TicketList将被删除,没有任何数据。这是代码。有没有人经历过类似的事情,有没有人能就我做错了什么提供一些建议?我已经进行了ReskKit查找,以简化代码并进行调试,以查看它是否会产生任何影响。我看了其他帖子,还没有找到一个关于为什么会发生这种情况的答案Objective c 在iOS7中实现应用图标徽章后台提取时核心数据表被删除,objective-c,iphone,core-data,ios7,Objective C,Iphone,Core Data,Ios7,我正在尝试在我的AppDelegate.m中实现一个后台抓取,通过RestKit(此处未显示)从web服务中提取最新记录计数,从而获取应用图标徽章以反映更新的记录计数。当我在Xcode中模拟BackGroundFetch时,一切正常。当后台抓取在我的iPhone 5S上运行时,我的整个表TicketList将被删除,没有任何数据。这是代码。有没有人经历过类似的事情,有没有人能就我做错了什么提供一些建议?我已经进行了ReskKit查找,以简化代码并进行调试,以查看它是否会产生任何影响。我看了其他帖
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
//Added this code for the app icon badge functionality
[[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
return YES;
}
- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^) (UIBackgroundFetchResult))completionHandler
{
[UIApplication sharedApplication].applicationIconBadgeNumber = 1;
completionHandler(UIBackgroundFetchResultNewData);
}
*/
- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
intAvailCount = 0;
[self setUpCoreDataStack];
NSManagedObjectContext *context = [self managedObjectContext];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"TicketList" inManagedObjectContext:context];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:entity];
self.ticketListData = [[context executeFetchRequest:fetchRequest error:&error] mutableCopy];
if ([ticketListData count] != 0){
//Perform loop through TicketList SQLite DB and count using intAvailCount
TicketList *info = [ticketListData objectAtIndex:0];
for (info in ticketListData) {
//Check to see if tickets in table have been added to do
intAvailCount++;
}
//End Loop
}
[UIApplication sharedApplication].applicationIconBadgeNumber = intAvailCount;
completionHandler(UIBackgroundFetchResultNewData);
}
-(void)setUpCoreDataStack
{
NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:[NSBundle allBundles]];
NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
NSURL *url = [[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject] URLByAppendingPathComponent:@"TicketList.sqlite"];
NSDictionary *options = @{NSPersistentStoreFileProtectionKey: NSFileProtectionComplete,
NSMigratePersistentStoresAutomaticallyOption:@YES};
NSError *error = nil;
NSPersistentStore *store = [psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:options error:&error];
if (!store)
{
NSLog(@"Error adding persistent store. Error %@",error);
NSError *deleteError = nil;
if ([[NSFileManager defaultManager] removeItemAtURL:url error:&deleteError])
{
error = nil;
store = [psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:options error:&error];
}
if (!store)
{
// Also inform the user...
NSLog(@"Failed to create persistent store. Error %@. Delete error %@",error,deleteError);
abort();
}
}
self.managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
self.managedObjectContext.persistentStoreCoordinator = psc;
}
问题解决了。我将对setUpCoreDataStack的调用移动到示例中的第1个方法didFinishLaunchingWithOptions,该方法在应用程序启动时被调用,我的问题得到了解决。不太清楚为什么会发生这种事,但是,我认为这与每次触发执行后台提取方法时调用setUpCoreDataStack有关。尝试使用–countForFetchRequest:error:获取票证列表对象的计数,而不是使用for循环进行计数。感谢您的建议,但是,它仍然不能解决我的桌子被毁的问题。