【问题标题】:How To Save Data For Bookmarks?如何保存书签数据?
【发布时间】:2011-08-18 01:11:43
【问题描述】:

我正在为我的应用创建一个非常简单的书签菜单。我只需要为每个对象保存 3 个字符串。

我正在考虑使用核心数据,但出于各种原因我不希望它与我的核心数据库连接。因此,我还有哪些其他简单的选择? NSUserDefaults 还是 .plist?

我只需要为每个对象保存 3 个字符串,然后将它们加载到要查看的表格视图中。

【问题讨论】:

    标签: iphone objective-c cocoa-touch uitableview nsstring


    【解决方案1】:

    我推荐 NSUserDefaults - 当然更容易。我倾向于只将 plist 文件用于我希望作为开发人员可编辑的静态数据,但应用程序希望它是只读的(例如嵌入地图图像上对象的坐标)。

    根据您的描述,您可能希望存储一个包含 NSDictionary 的 NSArray。

    // Get the user defaults object
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    
    
    // Load your bookmarks (editable array)
    NSMutableArray *bookmarks = [[NSMutableArray alloc]init];
    NSArray *bookmarksLoaded = [userDefaults arrayForKey:@"bookmarks"];
    if (bookmarksLoaded != nil) {
        [bookmarks initWithArray:bookmarksLoaded];
    } else {
        [bookmarks init];
    }
    
    // Add a bookmark
    NSMutableDictionary *bookmark = [NSMutableDictionary new];
    [bookmark setValue:@"value" forKey:@"name"];
    [bookmark setValue:@"value" forKey:@"description"];
    [bookmark setValue:@"value" forKey:@"code"];
    [bookmarks addObject:bookmark];
    
    // Save your (updated) bookmarks
    [userDefaults setObject:bookmarks forKey:@"bookmarks"];
    [userDefaults synchronize];
    
    // Memory cleanup
    [bookmarks release];
    

    【讨论】:

    • 谢谢,我该如何设置呢?假设我的 tableview 上有一个按钮,当被选中时,我想添加到书签数组中。我要保存 3 个字符串,namedescriptioncode。保存后,我需要一种从 NSUserDefaults 加载数组的方法。
    • 我在[bookmarks addObject:bookmark]; 遇到了崩溃,上面写着*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSMutableArray count]: method sent to an uninitialized mutable array object'
    • 我修复了您发布的代码,您忘记了 init 它。但是现在当第二次调用该方法时出现此错误*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSMutableArray initWithCapacity:]: method only defined for abstract class. Define -[__NSArrayM initWithCapacity:]!'
    • 我在 if 语句中的书签对象上调用 init,在它的分配下方 2 行。您不能两次调用 init - 这是您的代码更改所做的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 2019-05-17
    相关资源
    最近更新 更多