【发布时间】:2016-10-05 22:51:02
【问题描述】:
我不知道如何表达这个问题,但我希望你能提供帮助。
我有一个 Book 对象。每本书都有一个标题、一个 ID 字符串和一个表示是否已阅读的布尔值。我可以分别获取每个标题、ID 字符串和布尔值的值 - 但我似乎无法获得哪本书属于哪个布尔值。所有数据都作为数组包含在 BookDataController 文件中。布尔值保存在 nsuserdefaults 中。
@interface Book : NSObject
@property (nonatomic, strong) NSString *title;
@property (nonatomic, strong) NSString *readIDString;
@property BOOL hasRead;
@end
这是我用来获取数组值的代码:
NSMutableArray *dataSource;
dataSource = _bookDataController.bookInfoArray;
NSArray *bookTitles = [dataSource valueForKey:@"title"];
NSLog(@"DataSource Title: %@", bookTitles);
(返回:["title1", "title2", "title3, etc])
NSArray *titlesRead = [dataSource valueForKey:@"hasRead"];
NSLog(@"DataSource Bool: %@", titlesRead);
(返回:[false、false、true 等])
NSArray *readIDs = [dataSource valueForKey:@"readIDString"];
NSLog(@"DataSource ReadID: %@", readIDs);
(返回:[“id1”、“id2”、“id3”等])
我知道我可以像这样获取保存到 NSUserDefaults 的所有键的值:
NSArray *keys = [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys];
for(NSString *key in keys)
{
NSLog(@"value: %@ forKey: %@", [[NSUserDefaults standardUserDefaults] valueForKey:key], key);
}
但这会返回在整个应用程序中使用的所有类型的默认值,而不是按照我可以告诉的任何可排序顺序。
所以我的问题是:如何注销每本书的值,以便获得带有正确布尔值的标题?这可能吗?
(例如:“书名”:假,“书名”:真等)
现在我正在输入它,它看起来像一本字典!然而我不知道如何达到这一点。在 Stack Overflow 上使用 NSArray 获取当前调用已经有好几天了!这应该表明我在这一点上的理解水平。 :)
更好的是,现在我正在考虑这个问题,我想改为返回这个:
(“id1”:假,“id2”:假,“id3”:真等)
(这两个电话都很棒!)
如果我需要澄清任何事情或者您是否需要更多代码,请告诉我。非常感谢大家!
【问题讨论】:
-
您需要持久化您的
Book对象,而不仅仅是单独的数组。您可以使用NSKeyedArchiver,但老实说,您应该使用Core Data,而不是将NSUserDefaults视为数据存储 -
感谢您的回答。我已经开始了一些关于 Core Data 的教程,但它仍然有点超出我的想象。不过我会坚持!此时只有布尔值被保存到 nsuserdefaults 并且所有其他信息都从数据文件中调用。我只是希望能够在控制台中将其注销。这一切在我的表格视图中都很好用。在如何将代码添加到 tableview 以及我需要如何调用它以在控制台中查看它是一个不同的过程。这就是我似乎无法理解的。
-
您想要返回 id、title 和 boolean 值,其中 book 被阅读或 boolean 为真。 @IWannaLearn 对吗?如果是,那么我将发布我的代码
-
是的,没错。谢谢!
标签: ios objective-c arrays nsobject nslog