2017-04-20 1 views
0

Voici mon problème.Obtenir les détails du fichier plist avec objectif-c

Je ne parviens pas à comprendre comment accéder à la touche «Détails» au même niveau que la touche «Nom» une fois que vous avez recherché une touche de nom spécifique. Peut-être qu'il me manque quelque chose?

Je sais que vous pouvez obtenir "Détails" via [dict objectForKey:@"Details"] mais je ne suis pas sûr de savoir comment obtenir celui sur les mêmes niveaux que celui qui a été recherché.

code:

- (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 = 
     } 
    } 

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

Si vous obtenez le nom avec '[dict objectForKey: @ "Nom"] ', comment auriez-vous les détails? – Willeke

+2

Qu'est-ce qui vous dérange? Vous savez déjà comment accéder à la touche '@" Name "'. Obtenir la clé '' @ "Details" est exactement la même chose. – rmaddy

+0

@rmaddy Oui, c'est correct. Je ne suis pas sûr de savoir comment obtenir le "Détails" un sur le même niveau que le "Nom" que je cherchais. – Number1

Répondre

0

Je ne suis pas sûr de ce que la confusion est. Vous savez déjà comment obtenir la valeur de la clé Name. Obtenir la valeur de la clé Details est le même:

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

Notez comment je moderne syntaxe Objective-C au lieu de l'ancienne utilisation de style de objectForKey:.

0

// Cette méthode devrait fonctionner correctement

// méthode Enumeration est meilleure que pour la boucle

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; 

     } 
    }];