我是Core Data的新手,我的项目需要一些帮助。
我正在开发iPhone应用程序,该应用程序从服务器获取JSON(餐厅信息),并在地图和表格视图上显示位置,并通过按“添加收藏夹”按钮存储喜欢的餐厅。
现在,我仅使用NSDictionary及其功能在表和注释上显示数据,并使用favoriteRestaurant实体存储喜欢的餐厅数据。
但是,我想将NSDictionary对象转换为Core Data对象(餐厅),并向其添加“ BOOL isFavorite”属性,然后删除favoriteRestaurant实体。
生成功能,用于保存通过的餐厅对象并更改其“ isFavorite”状态,此状态由“添加收藏夹”按钮触发。
“收藏夹”表仅显示已保存的餐厅,并且isFavorite = YES。
我想知道这是否是实现我想要的正确方法。
先感谢您!
嗨,谢谢您的快速回复。我忘了说我也想对该类实现MKAnnotation,因此地图上的每个注释图钉都属于唯一的餐厅对象。如果要执行此操作,我应该拥有另一个喜欢的类或Core Data实体,还是只将其保存在Restaurant表中,然后使isFavorite = YES?再次感谢你!
最佳答案
如果只考虑保存收藏夹,则id与plist序列化一起使用。我在多个应用程序中执行相同的操作。通常我会创建一个如下的Helper类。#import "Favorites.h"#import "NSArray+Locations.h"@implementation Favorites+(void)addFavorite:(Location *)location{ NSMutableArray *remove = [NSMutableArray array]; [location.data enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { NSLog(@"%@,%@, %@",key,obj,[obj class]); if([obj isKindOfClass:[NSNull class]]) [remove addObject:key]; }]; [location.data removeObjectsForKeys:remove]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSMutableDictionary * favorites = [NSMutableDictionary dictionaryWithDictionary:[defaults objectForKey:FAVORITES]]; if(!favorites) favorites = [NSMutableDictionary dictionaryWithCapacity:1]; [favorites setObject:location.data forKey:[location getID]]; [defaults setObject:favorites forKey:FAVORITES]; [defaults synchronize];}+(void)removeFavorite:(Location *)location{ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSMutableDictionary * favorites = [NSMutableDictionary dictionaryWithDictionary:[defaults objectForKey:FAVORITES]]; [favorites removeObjectForKey:[location getID]]; [defaults setObject:favorites forKey:FAVORITES]; [defaults synchronize];}+(NSArray *)getFavorites{ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSMutableDictionary * favorites = [defaults objectForKey:FAVORITES]; return [NSArray arrayWithLocations:[favorites allValues]];}+(BOOL)isFavorited:(Location *)location{ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSMutableDictionary * favorites = [defaults objectForKey:FAVORITES]; for(NSString *key in [favorites allKeys]) if([[location getID] isEqualToString:key]) return YES; return NO;}@end
在这种情况下,Location对象只是字典的包装,以使访问字段更加简单。
如果您想保存所有数据而不仅仅是保存收藏夹,那么我会选择核心数据,否则很大的列表可能会给您带来记忆上的麻烦。
关于iphone - JSON和核心数据:我应该将JSON转换为核心数据吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6948362/