【问题标题】:Get details from plist file with objective-c使用objective-c从plist文件中获取详细信息
【发布时间】:2017-04-20 21:48:22
【问题描述】:

这是我的问题。

一旦搜索特定名称键,我似乎无法弄清楚如何访问与“名称”键相同级别的“详细信息”键。也许我错过了什么?

我知道您可以通过[dict objectForKey:@"Details"] 获得“详细信息”,但我不知道如何获得与搜索的级别相同的那个。

代码:

- (IBAction)ScoringButtonView:(id)sender {
    ScoringViewController *svController = [[ScoringViewController alloc] initWithNibName:@"ScoringView" bundle:[NSBundle mainBundle]];
    [self.navigationController pushViewController:svController animated:YES];

    UIButton *scoringButton = (UIButton*)sender;
    NSLog(@"Scoring is %@ ", scoringButton.currentTitle);
    svController.ScoringName = scoringButton.currentTitle;
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Scoring" ofType:@"plist"];
    NSArray *plistData = [NSArray arrayWithContentsOfFile:path];
    for (NSDictionary *dict in plistData) {
        if ([[dict objectForKey:@"Name"] isEqualToString:scoringButton.currentTitle]) {
            NSLog(@"Scoring ==  %@ ", scoringButton.currentTitle);
//            svController.ScoringInfo = 
        }
    }

列表:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <array>
        <dict>
            <key>Name</key>
            <string>Standard</string>
            <key>Details</key>
            <string>dagsdfgds</string>
        </dict>
        <dict>
            <key>Name</key>
            <string>Advanced</string>
            <key>Details</key>
            <string>gfdsgdfsgdsfg</string>
        </dict>
    </array>
</plist>

【问题讨论】:

  • 如果你得到[dict objectForKey:@"Name"]的名字,你将如何得到详细信息?
  • 您遇到了什么问题?您已经知道如何访问@"Name" 密钥。获取@"Details" 键是完全一样的。
  • @rmaddy 是的,正确的。我只是不确定如何获得与我搜索的“名称”相同级别的“详细信息”。
  • 和获取Name键完全一样。
  • svController.ScoringInfo = [dict objectForKey:@"Details"]

标签: objective-c arrays dictionary


【解决方案1】:

我不确定是什么混乱。您已经知道如何获取 Name 键的值。获取Details 键的值是一样的:

for (NSDictionary *dict in plistData) {
    if ([dict[@"Name"] isEqualToString:scoringButton.currentTitle]) {
        NSString *details = dict[@"Details"];
    }
}

注意我是如何使用现代的 Objective-C 语法而不是旧式的 objectForKey:

【讨论】:

    【解决方案2】:

    //这个方法应该可以正常工作

    //枚举方式优于for循环

      NSString *filePath = [[NSBundle mainBundle] pathForResource:@“LanguageList” ofType:@"json"];
        NSString *myJSON = [[NSString alloc] initWithContentsOfFile:filePath encoding:NSJSONReadingAllowFragments error:NULL];
        NSError *error =  nil;
        NSDictionary * dict = [NSJSONSerialization JSONObjectWithData:[myJSON dataUsingEncoding:NSUTF8StringEncoding] options:kNilOptions error:&error];
    
    
       [dict[@"result"] enumerateObjectsUsingBlock:^(id  _Nonnull objList, NSUInteger idx, BOOL * _Nonnull stop) {
    
                NSLog(@“Values %@”,obj);
                *stop = YES;
    
            }
        }];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-07
      • 2010-11-02
      • 2014-10-15
      • 1970-01-01
      • 2012-03-22
      • 2013-05-29
      • 1970-01-01
      相关资源
      最近更新 更多