如何从 Objective C、iOS 中的 NSUserDefaults 获取准确数据?

Posted

技术标签:

【中文标题】如何从 Objective C、iOS 中的 NSUserDefaults 获取准确数据?【英文标题】:How to get exact data from NSUserDefaults in Objective C,iOS? 【发布时间】:2015-07-29 12:40:12 【问题描述】:

我有 NSMutableArray,我正在尝试将该数组保存在 NSUserDefaults 中。这是我的代码:

保存:

NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
[currentDefaults setObject:[NSKeyedArchiver archivedDataWithRootObject:userSession.transactionArray] forKey:@"TransId"];
[currentDefaults synchronize];

检索:

NSUserDefaults *currentDefault = [NSUserDefaults standardUserDefaults];
NSData *dataRepresentingSavedArray = [currentDefault objectForKey:@"TransId"];
NSMutableArray *oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray];
userSession.transactionArray = [NSArray arrayWithArray:oldSavedArray];

但是,我正在将我的数组记录在日志中,

"<NSIndexPath: 0x160f8640> length = 2, path = 0 - 0",
"<NSIndexPath: 0x1602bd70> length = 2, path = 0 - 1",
"<NSIndexPath: 0x16026900> length = 2, path = 0 - 2",
"<NSIndexPath: 0x14f01dd0> length = 2, path = 0 - 3"

如何从中获取实际数据。有人可以帮我正确获取此值吗? 提前致谢。

【问题讨论】:

这里没有错,除了你的问题。 How to save NSMutableArrays in NSUserDefaults 的可能重复项 数组中的每个对象都必须符合 协议才能正确保存/检索数组。 您应该询问有关显示 nsdata 对象的问题 【参考方案1】:
 NSArray *aviArray=[[NSArray alloc] initWithObjects:@"A",@"B",@"C", nil];
[[NSUserDefaults standardUserDefaults] setObject:aviArray forKey:@"Arraykey"];
[[NSUserDefaults standardUserDefaults] synchronize];

 NSLog(@"%@",[[[NSUserDefaults standardUserDefaults] objectForKey:@"Arraykey"] objectAtIndex:0]); 

 NSLog(@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"Arraykey"]);

【讨论】:

【参考方案2】:

这类似于:NSKeyedArchiver archivedDataWithRootObject:

您缺少 initWithCoder: 和 encodeWithCoder: 的实现。其中一个答案描述了如何编写这些。

【讨论】:

以上是关于如何从 Objective C、iOS 中的 NSUserDefaults 获取准确数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 iOS 9 和 Objective C 中的 .MOV 文件中获取缩略图?

如何在 iOS 8 Objective c 中的 UIWebView 中从文档中加载 png 图像

如何使用 Objective C iOS 从 iPhone X 中的表格视图顶部删除多余的空间

NS前缀是什么意思?

从Objective C中的NSArray转换时如何比较String?

如何从Objective c中的UITableView获取UILabel的多个值