【发布时间】:2014-02-18 22:34:32
【问题描述】:
我不知道如何处理发生在我身上的问题。
我有一个应用程序,它使用AFNetworking 从我使用Core Data 放入SQLite 的服务器获取JSON。但是每次我启动一个应用程序时,我都必须检查服务器上是否有一些新对象并将它们与设备上的本地对象同步。 如何处理服务器和应用之间的这种同步?
一种方法是清除整个数据库并再次下载所有内容,但我有一个属性保持对象的状态(selected),我不能丢失此信息。有人建议我将响应与当前数据库同步,但我真的不知道如何高效且智能地做到这一点。
我唯一的想法是获取所有内容,并将响应中的每个对象与整个 NSArray 进行比较。如果匹配则中断循环,如果没有添加对象。
我正在使用这种方法从服务器获取所有内容并将其放入数据库:
[[AFHTTPRequestOperationManager manager] GET:ALL_GROUPS parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
for (id group in responseObject) {
Group *groupEntity = [NSEntityDescription insertNewObjectForEntityForName:@"Group" inManagedObjectContext:self.moc];
groupEntity.name = [group valueForKey:@"name"];
groupEntity.cashID = [group valueForKey:@"id"];
groupEntity.caseInsensitiveName = [[group valueForKey:@"name"] lowercaseString];
groupEntity.selected = FALSE;
NSError *error;
if (![self.moc save:&error]) {
NSLog(@"Couldn't save: %@", [error localizedDescription]);
}
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// Show alert with info about internet connection
UIAlertView *internetAlert = [[UIAlertView alloc] initWithTitle:@"Ups!" message:@"Wygląda na to, że nie masz połączenia z internetem" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[internetAlert show];
}];
还有这个小家伙来取所有东西:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Group"
inManagedObjectContext:self.moc];
[fetchRequest setEntity:entity];
NSError *error;
NSArray *fetchedObjects = [self.moc executeFetchRequest:fetchRequest error:&error];
我将不胜感激任何建议...我坚持这个...
【问题讨论】:
-
下载到设备的数据可以被用户修改吗?
-
@CarmeloS,只有
selected属性可以。 -
还有一个AFHTTPNetworking实现的NSIncrementalStore,你也可以看看:github.com/AFNetworking/AFIncrementalStore
标签: ios objective-c core-data afnetworking