如何匹配 NSObject 数组中的两个值? (目标c)

How to match two values from an NSObject array? (Obj c)

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

我有一本书 object。每本书都有一个标题、一个 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);

(Returns: ["title1", "title2", "title3, 等等])

NSArray *titlesRead = [dataSource valueForKey:@"hasRead"];
NSLog(@"DataSource Bool: %@", titlesRead);

(Returns: [假、假、真等])

NSArray *readIDs = [dataSource valueForKey:@"readIDString"];
NSLog(@"DataSource ReadID: %@", readIDs);

(Returns: ["id1", "id2", "id3", 等等])

我知道我可以像这样获取保存到 NSUserDefaults 的所有键的值:

NSArray *keys = [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys];
for(NSString *key in keys)
{
    NSLog(@"value: %@ forKey: %@", [[NSUserDefaults standardUserDefaults] valueForKey:key], key);
}

但是这个 return 在整个应用程序中使用的所有类型的默认值,而不是我能告诉的任何可排序的顺序。

所以我的问题是:如何注销每本书的值,以便获得与正确布尔值匹配的书名?这可能吗?

(示例:"book title":假,"book title":真等)

现在我正在打字,它看起来像一本字典!但是我不知道如何达到这一点。在 Stack Overflow 上花了好几天时间才得到 NSArray 的当前调用!这应该表明我在这一点上的理解水平。 :)

更好的是,既然我正在考虑更多,我想 return 改为:

("id1":假,"id2":假,"id3":真,等等)

(两个电话都很棒!)

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

所以,我在这里找到了这个答案:。它完全按照我的要求做了。呜呼,越来越近了!我想记录每个键的所有值,以便所有值 "matched up"。有时刚开始时很难清楚地表达问题,但这是我基于该答案的代码:

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);

这个returns: [{"title": "Title1", "readIDString": "id1", "hasRead": 真}, {"title": "Title2", "readIDString": "id2", "hasRead": false}, 等等]

按 "hasRead" 排序首先列出所有真实值。