2013-04-09 68 views
1

這是一個NSDictionary的輸出:如何循環查看本詞典?

從貝寶自適應支付
{ 
    client =  { 
     environment = mock; 
     "paypal_sdk_version" = "1.0.3"; 
     platform = iOS; 
     "product_name" = "PayPal iOS SDK"; 
    }; 
    payment =  { 
     amount = "39.95"; 
     "currency_code" = USD; 
     "short_description" = "Awesome saws"; 
    }; 
    "proof_of_payment" =  { 
     "adaptive_payment" =   { 
      "app_id" = "APP-1245783590"; 
      "pay_key" = "AP-70M62356425642W"; 
      "payment_exec_status" = COMPLETED; 
      timestamp = "2012-03-03T15:53:55Z"; 
     }; 
    }; 

及其。最後我做這個:

- (void)verifyCompletedPayment:(PayPalPayment *)completedPayment { 

    NSDictionary *pOPDictionary = [NSDictionary dictionaryWithDictionary:completedPayment.confirmation]; 
    NSLog(@"pOPDictionary: %@",pOPDictionary); 

    NSDictionary *subDictionary = [pOPDictionary objectForKey:@"proof_of_payment"]; 
    NSDictionary *sub2Dictionary = [subDictionary objectForKey:@"adaptive_payment"]; 
    NSString *proofString = [sub2Dictionary objectForKey:@"payment_exec_status"]; 

    if ([proofString isEqualToString:@"COMPLETED"]) { 
     NSLog(@"Payment Completed Successfully"); 
    } else { 
     NSLog(@"Payment Error"); 
    } 

    NSData *confirmation = [NSJSONSerialization dataWithJSONObject:completedPayment.confirmation options:0 error:nil]; 

} 

是否有更有效的方式來獲得從字典詞典的字典中的鍵?我只是真的需要那個鑰匙。所以我不認爲我應該循環或循環通過其他人。

回答

0

有兩個2個不同的可能性,如何可以簡化代碼。您可以使用「現代Objective-C的下標語法」(見http://clang.llvm.org/docs/ObjectiveCLiterals.html瞭解更多信息):

NSDictionary *pOPDictionary = completedPayment.confirmation; 
NSString *proofString = pOPDictionary[@"proof_of_payment"][@"proof_of_payment"][@"payment_exec_status"]; 

或鍵值編碼:

NSDictionary *pOPDictionary = completedPayment.confirmation; 
NSString *proofString = [pOPDictionary valueForKeyPath:@"proof_of_payment.proof_of_payment.payment_exec_status"]; 

我不認爲有這樣的優點一個在另一個之上,它只是一個你選擇哪一個味道的問題。