Objective c 从嵌套的NSDictionary查找键/值

Objective c 从嵌套的NSDictionary查找键/值,objective-c,Objective C,我有一个文件位于/Users/admin/Desktop/wi-fi.txt,其中包含以下内容。。。 Wi-Fi: 我想了解每个wifi网络名称及其噪声/强度的信息。有人能告诉我怎么做吗。不确定我是否理解这个问题。试着把它弄清楚一点 不管怎样,我想我明白了 NSString *path = [[NSBundle mainBundle] pathForResource:@"/Users/admin/Desktop/wi-fi" ofType:@"txt"]; NSArray *categories

我有一个文件位于/Users/admin/Desktop/wi-fi.txt,其中包含以下内容。。。 Wi-Fi:


我想了解每个wifi网络名称及其噪声/强度的信息。有人能告诉我怎么做吗。

不确定我是否理解这个问题。试着把它弄清楚一点

不管怎样,我想我明白了

NSString *path = [[NSBundle mainBundle] pathForResource:@"/Users/admin/Desktop/wi-fi" ofType:@"txt"];
NSArray *categories = [NSArray arrayWithContentsOfFile:path];
for (NSDictionary *category in categories) {
    NSLog(@"%@", [category objectForKey:@"Interfaces"]);
    NSLog(@"%@", [category objectForKey:@"Software Versions"]);
}
我还没试过,但我觉得应该可以,试试看。希望这是类似于你正在寻找的东西。如果没有,希望它是在正确的方向,它会让你更接近找到你的答案。快乐编码

编辑

将文本文件拖到项目中,然后执行以下操作

NSString *path = [[NSBundle mainBundle] pathForResource:@"nsdictionarytextfile" ofType:@"txt"];
NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:NULL];
NSArray *testArray = [content componentsSeparatedByString:@"\n"];
NSString *topDictionary = @"";
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
NSMutableDictionary *finalDict = [NSMutableDictionary dictionary];
for(NSString *s in testArray){
    NSArray *newArray = [s componentsSeparatedByString:@":"];
    if([newArray[1] isEqualToString:@""]){
        if([dict count] == 0){
            topDictionary = newArray[0];
        }
        else{
            topDictionary = [topDictionary stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
            [finalDict setObject:[dict copy] forKey:[topDictionary copy]];
            [dict removeAllObjects];
        }
    } else{
        NSString *object = [newArray[1] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
        NSString *key = [newArray[0] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
        [dict setObject:object forKey:key];
    }
}
topDictionary = [topDictionary stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
[finalDict setObject:dict forKey:topDictionary];
NSLog(@"finalDict: %@", finalDict);
*请不要以为这还没有结束!您必须找出更多的逻辑*


我真的不知道你想要他们如何,但这应该让你看看它应该如何工作。我没有弄清楚添加顶级词典及其子级词典的完整逻辑,但这应该会让您找到正确的方向。我可能会先去掉放在顶部字典中的边沿,检查字符串前面的空白,然后用它来确定字典应该放在哪里。没有空格意味着它是字典中最高的一个,空格越多,它就越是“内部”。希望这能帮助你开始

您只有文本文件作为输入。它不是嵌套字典。您应该将文件作为文本读取并首先解析它


该文件的格式看起来像YAML,但此时它不是有效的YAML。如果您可以访问生成文件的代码,那么确保它生成有效的YAML可能是有意义的。然后您可以使用Objective-C解析YAML文件,以获得嵌套的
NSDictionary
s。否则,您应该为输入文本文件编写自己的解析器。

您不应该询问是否有API来获取这些信息,而不是使用这种笨拙、缓慢且脆弱的解决方案吗?或者您已经尝试查找API但失败了吗?我知道API objectForKey,但我不知道如何在嵌套API的情况下使用它。For循环没有得到执行,因为
NSBundle pathForResource
不是打开该文件的方法。该文件显然不是应用程序捆绑包的一部分,那么为什么会涉及到
NSBundle
。此外,该文件不是数组。@如果您是正确的。OP必须添加该文件才能使用nsbundle打开该文件。
NSString *path = [[NSBundle mainBundle] pathForResource:@"nsdictionarytextfile" ofType:@"txt"];
NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:NULL];
NSArray *testArray = [content componentsSeparatedByString:@"\n"];
NSString *topDictionary = @"";
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
NSMutableDictionary *finalDict = [NSMutableDictionary dictionary];
for(NSString *s in testArray){
    NSArray *newArray = [s componentsSeparatedByString:@":"];
    if([newArray[1] isEqualToString:@""]){
        if([dict count] == 0){
            topDictionary = newArray[0];
        }
        else{
            topDictionary = [topDictionary stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
            [finalDict setObject:[dict copy] forKey:[topDictionary copy]];
            [dict removeAllObjects];
        }
    } else{
        NSString *object = [newArray[1] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
        NSString *key = [newArray[0] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
        [dict setObject:object forKey:key];
    }
}
topDictionary = [topDictionary stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
[finalDict setObject:dict forKey:topDictionary];
NSLog(@"finalDict: %@", finalDict);