我是 Core Data 的新手,我的项目需要一些帮助。
我正在开发 iPhone 应用程序,它从服务器获取 JSON(餐厅信息)并在 map 和表格 View 上显示位置,并通过按“添加收藏夹”按钮存储最喜欢的餐厅。
目前,我只是使用 NSDictionary 及其函数在表格和注释上显示数据,并使用 favoriteRestaurant 实体来存储最喜欢的餐厅数据。
但是,我想将 NSDictionary 对象转换为核心数据对象(餐厅),并为其添加“BOOL isFavorite”属性,然后删除 favoriteRestaurant 实体。 Make 函数保存通过的餐厅对象并更改其“isFavorite”状态,该状态由“添加收藏夹”按钮触发。
最爱表只显示已保存的餐厅且isFavorite = YES。
我想知道这是否是实现我想要的目标的正确方法。 提前致谢!
您好,感谢您的快速回复。我忘了说我还想为该类实现 MKAnnotation,因此 map 上的每个注释图钉都属于唯一的餐厅对象。如果我想这样做,我应该有另一个最喜欢的类或核心数据实体,还是只将它保存在 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 对象只是一个字典的包装器,以简化对字段的访问。
如果您想保存所有数据而不仅仅是收藏夹,那么我会选择核心数据,否则非常大的 plist 可能会让您感到头疼。
关于iphone - JSON 和核心数据 :Should I convert JSON into Core Data?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6948362/