iphone - JSON 和核心数据 :Should I convert JSON into Core Data?

标签 iphone objective-c ios cocoa-touch core-data

我是 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/

相关文章:

iphone - 如何在 iOS 上使用 libharu 以 2/3 行显示字符串?

ios - 来自 images.xcassets 的 Xcode 5 切片图像,在 xib 中正确拉伸(stretch),但在运行时不正确

ios - ExtAudioFileWrite 创建静音 m4a

ios - iTunes Beta测试和发行资料

iphone - 需要 TableViewCell 在被触摸时闪烁

iphone - 我使用 SD 图像构建我的应用程序,如何支持 HD?

iphone - Objective C AES256 解密

objective-c - textViewDidChange : crashes in iOS 7

ios - 通过配对来自两个不同 NSArrays 的值来创建 CGPoints 数组

ios - 在单元格中,如何定位和调整从带有自动布局的 Nib 创建的 View 的大小?