2016-07-30 78 views
0

我有plist中:如何顯示來自plist的標籤上的值。 Objective-C的

<?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,但現在這個返回錯誤):

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

回答

0

再說一遍,你已經做得非常好了。

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; 
    } 
} 
+0

Droppy,謝謝! – Mario

0

試試這個代碼它必須工作完美!

 // 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> 
+0

謝謝,但我怎麼顯示名稱和描述取決於名稱(例如瑪麗)? – Mario

+1

該代碼不起作用。你爲什麼要調用'[NSArray initWithContentsOfFile:]'傳遞一個字典?它應該是一個字符串。但是,您已經加載了'.plist'文件?!? 「必須工作完美」... – Droppy

+0

我有一個錯誤:不兼容的指針類型發送'NSDictionary *'參數的類型'NSString * _Nonull' – Mario

0

執行以下步驟:

  1. 獲取在字典中的plist數據

    NSString *plistPath=[[NSBundle mainBundle] pathForResource:@"NameOfPlistFile" ofType:@"plist"]; 
    NSDictionary *bundleDictionary=[NSDictionary dictionaryWithContentsOfFile:plistPath]; 
    
  2. 獲取相對值,以重點

    NSString *nameString = [bundleDictionary valueForKey:kCustomURLScheme]; 
    

希望這會有所幫助!