我应该在NSUserDefaults中保留pickerViews内容吗?

时间:2016-05-13 12:55:23

标签: ios swift

我的系统中有一份国家列表和世界上每个国家的州名单。这些内容存储在我的数据库中,我可以通过REST请求访问它。论文中的国家和州是一个静态的内容(我不打算改变那些寄存器,但最终,也许我会......)。现在,我每次需要一个国家时都要做一个GET请求,每次我需要一个州,我也会使用国家/地区的ID进行GET。我的问题是:有一些好的模式可以涵盖这类问题吗?我应该在哪里保留我的系统中的国家和州?我应该将它存储在NSUserDefaults上吗?

2 个答案:

答案 0 :(得分:1)

您可以拥有一个JSON文件,其中包含应用程序包中的国家/地区名称和州名称列表:)由于国家和州不会经常更改,因此在应用程序包中安装硬编码数据是安全的:)

让我们假设您将国家/地区数据保存在名为Countries.json

的文件中

您可以使用

阅读
    NSData *data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"countries" ofType:@"json"]];
   NSError *localError = nil;
   NSDictionary *parsedObject = [NSJSONSerialization JSONObjectWithData:data options:0 error:&localError];

   if (localError != nil) {
         NSLog(@"%@", [localError userInfo]);
   }
   countriesList = (NSArray *)parsedObject;

多数民众赞成:)你和你的伙伴有你的国家名单:)

OR

如果您不想自己保存国家/地区,请在使用GET请求获取国家/地区列表后将响应保存在应用程序文档文件夹中的文件中:)

下次再从同一个文件中读取数据:)

NSString* filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString* fileName = @"countries.json";
NSString* fileAtPath = [filePath stringByAppendingPathComponent:fileName];
if ([[NSFileManager defaultManager] fileExistsAtPath:fileAtPath]) {
    NSData *data = [NSData dataWithContentsOfFile:fileAtPath];
    NSError *localError = nil;
    NSDictionary *parsedObject = [NSJSONSerialization JSONObjectWithData:data options:0 error:&localError];
}
else {
      //make webservice call fetch the country list and write it to file :)
}

将整个世界国家/地区列表及其资金保存在用户默认值中并不是优先选择的伙伴:)并且每次从服务器获取它都会放纵延迟向用户显示选择器:)

所以我的建议是在应用程序包中保存一个文件,并在需要数据伙伴的时候阅读它:)

答案 1 :(得分:0)

我不建议在NSUserDefaults上存储这些信息,你没有足够使用CoreData但你可以存档!

如果你想使用NSUserDefault,还有一个很好的链接: Using NSUserDefaults on arrays