【问题标题】:NSMutableDictionary in xcode to store entries [closed]Xcode中的NSMutableDictionary用于存储条目[关闭]
【发布时间】:2014-04-07 12:32:55
【问题描述】:

我正在创建一个 iOS 应用程序,用户在其中输入学生 ID、学生姓名和学生姓氏...然后将其存储并显示在表格视图中(数据稍后将上传到外部数据库)如何我去解决这个问题?

NSMutableDictionary 是不是最好的方法?

谢谢

【问题讨论】:

  • 我投票结束的原因有两个:1)这太广泛了;2)这个问题在提出这个问题之前没有任何研究的迹象,也没有任何尝试自己解决这个问题的尝试并且缺少任何共享代码来解决他们遇到的问题。
  • 我研究了很长时间。我没有代码可以分享,因为无法解决问题,因此来这里寻求一些建议。
  • @ste,很难相信你在这个话题上一无所获。
  • 我已经搜索了一天半,现在在谷歌、论坛和 youtube 上寻找教程或示例。我所需要的只是一个关于如何最好地做到这一点的示例/说明我想要的只是三个字段 id、name、last name 并且它以类似于表的方式存储它......你知道我在哪里可以找到一个例子吗?
  • @steff 如果是这种情况,并且您要求 best 为什么要实施此功能,那么这将真正生成基于意见的答案,如果您要求提供此教程,那么您正在要求可以关闭这两个问题的场外资源。只是为了让你知道我只是在谷歌上搜索了你的标题并得到了答案,所以仍然缺乏研究评论。

标签: ios objective-c arrays nsmutablearray nsmutabledictionary


【解决方案1】:

如果您尝试使用 Model 类来实现它会更好。像这样的东西:-

@interface Student : NSObject
@property (nonatomic, retain) NSString * studentID;
@property (nonatomic, retain) NSString * studentForeName;
@property (nonatomic, retain) NSString * studentSurname;
@end

然后将输入的数据保存到这个对象中并转移这个对象或收集多个条目以显示到tableview。

此过程将帮助您添加新属性或同时插入数据库。或者尝试将其发送到服务器时。

同时尝试在您的编码中遵循 MVC 模式,这将对您的可扩展性有很大帮助。

【讨论】:

  • 感谢您的帮助!我会尝试这种方式
  • 你总是希望有一个(不可变的)NSString 的复制属性。
【解决方案2】:

如果数据库会很大,我建议使用带有 CoreData 的 sqlite。 NSUserdefaults 不是用于大数据存储,而是用于用户设置等小事。您几乎可以将所有内容存储在 sqlite / 核心数据上。

【讨论】:

  • 什么是CodeDatda???
【解决方案3】:

NSDictionary/NSMutableDictionary 是众多方法之一。这是否是最好的方法取决于你。您还可以将其存储为 XML 或 JSON 格式(可能更容易上传到服务器),甚至可以创建自定义类。

无论您选择什么,我都会假设您希望将您的对象(无论是自定义类、字典还是 xml 字符串)与其他学生一起存储在一个数组中。在这种情况下,NSArray/NSMutableArray 将是可行的方法。祝你好运!

【讨论】:

  • 感谢您的帮助!我对数组方法有困难,这就是我考虑尝试字典的原因......你有任何包含三个或更多字段的 nsmutable 数组的示例代码,例如(学生 ID、姓名、姓氏)
【解决方案4】:

取决于您的服务器架构,但 NSMutableDictionary 通常没问题。

例如,如果您使用的是 JSON 服务器,我会选择 NSMutableDictionary 然后转换为 NSDATA 并发布到 JSON 服务器。比如:

NSData *postData = [NSJSONSerialization dataWithJSONObject:[YOUR DICTIONARY] options:0 error:&error];
[request setHTTPBody:postData];

如果您想在本地保存数据,请使用 Core Data。

【讨论】:

    【解决方案5】:

    您可以将项目单独存储或作为NSDictionary(不可变的)存储在NSUserDefaults

    保存:

    [[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:YOURDICTIONARY] forKey:@"MYKEY"];  
    [[NSUserDefaults standardUserDefaults] synchronize];
    

    把它拿回来:

    NSDictionary *mydictionary = (NSDictionary *)[NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey:@"MYKEY"]];
    

    【讨论】:

    • 好的,所以我希望最终能够在桌子上看到沿这些线的东西的最佳方法 1 - john - smith , 2-jodie-davies, 3-daniel-天等
    • 对不起,"NSDictionary (the immutable one)" 有什么意义,为什么不直接放 NSMutableDictionary???
    • 1) NSUserDefaults 将存储不可变的字典,即使它是可变的。 2) NSUserDefault 并不意味着保存业务数据。
    • 为什么要投反对票?请发表评论?
    • @user3366023 vikingosegundo 已经为downvoting 提供了很好的评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    相关资源
    最近更新 更多