我正在使用Core Data来保存我的数据。我从.csv文件预加载数据。我有一个名为places的实体,其属性为isFavorite
。我正在填充UITableViewController
中的数据。 TableViewCell由一些标签和一个按钮组成。当用户点击button
isFavorite
的值从false变为true时,反之亦然。我想在单独的tableView
中显示用户最喜欢的地方列表。只有那些地方会显示在isFavorite
值为真的收藏夹标签中。
我面临的问题是,当点击按钮时isFavorite
的值发生变化时,从false变为true并且用户关闭应用程序。重新启动后,isFavorite
值将更改回.csv文件中保存的值。
如何保存用户更改?所以最喜欢的地方仍然在最喜欢的名单中。
我阅读了一些关于NSUserDefaults
的文章,但无法理解。如果有人可以帮助我考虑我的应用程序的情况,将不胜感激。
答案 0 :(得分:0)
CoreData具有持久性,可以在整个应用程序启动过程中保存数据。如果您每次应用程序启动时都使用csv文件预加载CoreData模型,当然它不会被保留,因为您只是从csv文件加载数据而不保存它。你要么
答案 1 :(得分:0)
您只是忘了保存。每次用户更改对象时:
// Swift 2.0
do { try context.save() } catch {}
随意构建catch块以进行正确的错误处理。
答案 2 :(得分:-1)
您必须在coreData中保存更改...它不仅具有数据预加载...您可以保留数据。
问题......怎么样?
我认为你的AppDelegate标题中有这个属性:
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
在你的AppDelegate .m之类的东西,其中包括:
- (NSManagedObjectModel *)managedObjectModel { .... }
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator { .... }
- (NSManagedObjectContext *)managedObjectContext { .... }
- (void)saveContext {
NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
if (managedObjectContext != nil) {
NSError *error = nil;
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
CoreData类,Places:MTManagedObject
所以在你的tableViewController中,当它在isFavourite ON和isFavourite OFF之间切换时获取按钮的动作你必须这样做:
AppDelegate *appdelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = appdelegate.managedObjectContext;
Places *currentPlace = .... get 'place' object to modified from coredata using context object ....
currentPlace.isFavourite = @(isPlaceFavourite); // state get from button
[appdelegate saveContext];
注意将.csv数据文件放入coreData并使用coreData而非.csv文件加载数据。