我有一组 JSON 字符串,其中每个 JSON 字符串都有一个键。现在,我想将这些 JSON 字符串存储在设备上,以便以后可以使用这些数据。在这里,我不在设备上存储任何对象。我可以使用 CoreData 还是有任何替代方法?在设备上存储 JSON 的最佳做法是什么?
问问题
782 次
3 回答
1
您也可以简单地将 JSON 保存到文件中,并在下次需要时再次反序列化。
于 2013-04-21T14:47:12.350 回答
0
如果您没有太多数据要存储,您可以使用 plist 或 json。Plist 会更容易,如果你这样存储 json,你需要多几行代码。
创建一个 DataHelper 类,其中包含 save、add、findAll、findFirtWithValue:forObject: 方法。
这是一个示例
#define kPlistFilePath @"Data.plist"
#define kJsonFilePath @"Data.json"
@implementation DataController
+ (NSString *)savedFilePath
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = paths[0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:kPlistFilePath];
return filePath;
}
+ (NSArray *)findAll
{
NSString *filePath = [self savedFilePath];
return [NSArray arrayWithContentsOfFile:filePath];
}
+ (void)saveJSON:(id)object
{
NSString *filePath = [self savedFilePath];
NSArray *unsavedArray = nil;
if ([object isKindOfClass:[NSString class]]) {
NSError *error = nil;
unsavedArray = [NSJSONSerialization JSONObjectWithData:[object dataUsingEncoding:NSUTF8StringEncoding]
options:NSJSONReadingMutableContainers|NSJSONReadingAllowFragments
error:&error];
}else if([object isKindOfClass:[NSArray class]]){
unsavedArray = object;
}else if([object isKindOfClass:[NSDictionary class]]){
unsavedArray = @[object];
}
if ([unsavedArray count]) {
[unsavedArray writeToFile:filePath atomically:NO];
}
}
+ (NSDictionary *)userInfoForID:(NSString *)userID
{
NSArray *allData = [self findAll];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userid = %@",userID];
return [[allData filteredArrayUsingPredicate:predicate]lastObject];
}
于 2013-04-22T04:33:38.480 回答
0
JSON 只是为服务器和客户端(您的应用程序)之间的快速传输定义了紧凑的数据格式。
您需要做的是将服务器中的 JSON 数据解码为数据类型 NSDictionary、NSArray、NSString...,然后如果要存储它们,请使用 plist、sqlite 或 CoreData 进行存储。
对于 CoreData,您需要创建与 JSON 格式关联的实体。
例如:“键”:“值”-> NSDictionary
于 2013-04-21T14:40:30.047 回答