我不确定如何表达这个问题,但我希望你能够提供帮助。
我有一个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等])
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);
}
但是这会返回整个应用程序中使用的各种默认值,而不是我能说出的任何可排序顺序。
所以我的问题是这样:我如何注销每本书的价值,以便获得与正确的布尔一起使用的标题?这可能吗?
(示例:"书名":false,"书名":true等)
现在我输入了它,它看起来像一本字典!但我不知道如何达到这一点。 Stack Overflow上已经有几天用NSArray来获取当前的调用了!这应该表明我此时的理解水平。 :)
更好的是,既然我已经考虑了这个问题,我还是希望将其归还:
(" id1":false," id2":false," id3":true,等等)
(这两个电话都很棒!)
请告诉我是否需要澄清任何内容或是否需要更多代码。非常感谢大家!
答案 0 :(得分:0)
所以,我在这里找到了这个答案:https://stackoverflow.com/a/16710509/4225505。它完全符合我的要求。哇哦,越来越近了!我想记录每个键的所有值,以便所有值“匹配”。当你刚刚开始时,有时很难清楚地表达这个问题,但这是基于答案的代码:
NSMutableArray *anArray = [NSMutableArray array];
for(int idx = 0; idx<[bookTitles count]; idx++)
{
NSDictionary *dict = @{@"title": bookTitles[idx], @"readIDString": readIDs[idx], @"hasRead": titlesRead[idx]};
[anArray addObject:dict];
}
NSLog(@"%@", anArray);
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"hasRead" ascending:NO];
[anArray sortUsingDescriptors:@[descriptor]];
NSLog(@"%@", anArray);
返回: [{“title”:“Title1”,“readIDString”:“id1”,“hasRead”:true}, {“title”:“Title2”,“readIDString”:“id2”,“hasRead”:false}等等]
按“hasRead”排序首先列出所有真值。