2016-07-30 5 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"]; 
    } 
} 

そして、なぜ私はこのように行うことはできません(I )私は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

ありがとうございますが、名前(例:Mary)に応じて名前と説明のみを表示するにはどうすればよいですか? – Mario

+1

そのコードは機能しません。なぜあなたは '[NSArray initWithContentsOfFile:]'を辞書に渡すのですか?それは文字列でなければなりません。しかし、既に '.plist'ファイルをロードしていますか?非常に遠くから私が持っている...エラーを – Droppy

+0

を「完璧に動作しなければならない」:互換性のないポインタ型は、ええ、あなたが正しいと、「NSStringの* _Nonull」 – Mario

0

次の手順を実行します。

  1. 辞書

    NSString *plistPath=[[NSBundle mainBundle] pathForResource:@"NameOfPlistFile" ofType:@"plist"]; 
    NSDictionary *bundleDictionary=[NSDictionary dictionaryWithContentsOfFile:plistPath]; 
    
  2. でplistのデータは、キー

    NSString *nameString = [bundleDictionary valueForKey:kCustomURLScheme]; 
    
に対する価値をゲット

希望すると便利です!

関連する問題