如何在 plist 的标签上显示值。 objective-c

how to display values on labels from plist. objective-c

我有 plist:

<?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>Daniel</string>
    <key>Description</key>
    <string>Bad boy</string>
</dict>
<dict>
    <key>name</key>
    <string>Mary</string>
    <key>description</key>
    <string>Good girl</string>
</dict>
</array>
</plist>

我想根据名称在我的标签值上显示名称和描述:

NSString *path = [[NSBundle mainBundle] pathForResource:@"PropList"   ofType:@"plist"];
ComplexArray = [NSArray arrayWithContentsOfFile:path];
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path];
for (int i = 0; i < [ComplexArray count]; i++) {
            ThirdViewController *item = [ComplexArray objectAtIndex:i];

    if ([item.name isEqualToString: @"Mary"]) { 
        _nameLabel.text = [dict objectForKey:@"name"];
        _descriptionLabel.text = [dict objectForKey:@"description"];
    }  
}

以及为什么我不能这样做(我在没有 plist 时这样做,但现在出现 return 错误):

NSString *path = [[NSBundle mainBundle] pathForResource:@"PropList" ofType:@"plist"];
ComplexArray = [NSArray arrayWithContentsOfFile:path];
for (int i = 0; i < [ComplexArray count]; i++) {
ThirdViewController *item = [ComplexArray objectAtIndex:i]; 
if ([item.name isEqualToString: @"Mary"]) { 
_nameLabel.text=item.name;
_descriptionLabel.text=item.description;
    }  
}

试试这个代码它一定能完美运行!

       // Read plist from bundle and get Root Dictionary out of it
    NSDictionary *dictRoot = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"PropList" ofType:@"plist"]];

    // Your dictionary contains an array of dictionary
    // Now pull an Array out of it.
    NSArray *array = [dictionary objectForKey:@"keyarray"];


    // Now a loop through Array to fetch single Item 

    for (NSDictionary *dict in array) {



if ([[dict objectForKey:@"name"] isEqualToString:@"Mary"])
{
    // Do stuff...

        NSString *name= [dict objectForKey:@"name"];
        NSString *description= [dict objectForKey:@"Description"];

}

    }

您需要在数组前添加一个键。

<key>keyarray</key>

执行以下步骤:

  1. 获取字典中的plist数据

    NSString *plistPath=[[NSBundle mainBundle] pathForResource:@"NameOfPlistFile" ofType:@"plist"];
    NSDictionary *bundleDictionary=[NSDictionary dictionaryWithContentsOfFile:plistPath];
    
  2. 获取关于键的值

    NSString *nameString = [bundleDictionary valueForKey:kCustomURLScheme];
    

希望对您有所帮助!

再说一次,你几乎已经做对了。

NSString *path = [[NSBundle mainBundle] pathForResource:@"PropList" ofType:@"plist"];
ComplexArray = [NSArray arrayWithContentsOfFile:path];
for (NSDictionary *dict in ComplexArray) {
    if ([dict[@"name"] isEqualToString:@"Mary"]) {
        _nameLabel.text = dict[@"name"];
        _descriptionLabel.text = dict[@"description"];
        break;
    }  
}