如何匹配NSObject数组中的两个值? (对象)

时间:2016-10-05 22:51:03

标签: ios objective-c arrays nsobject nslog

我不确定如何表达这个问题,但我希望你能够提供帮助。

我有一个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,等等)

(这两个电话都很棒!)

请告诉我是否需要澄清任何内容或是否需要更多代码。非常感谢大家!

1 个答案:

答案 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”排序首先列出所有真值。