【问题标题】:How to match two values from an NSObject array? (Obj c)如何匹配 NSObject 数组中的两个值? (对象 c)
【发布时间】: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


【解决方案1】:

所以,我在这里找到了这个答案: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”排序首先列出所有真值。

【讨论】:

    猜你喜欢
    • 2017-02-11
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 2019-07-16
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    相关资源
    最近更新 更多