2016-03-28 11 views
1

Ich habe Struktur wie:Kann mir jemand sagen, wie man NSPredate für NSArray mit NSDictionary in Objective C setzen?

[ 
{ 
    "time": { 
    "td": 3036 
    }, 
    "creditCardType": { 
    "cardType": "MasterCard", 
    "default": false 
    }, 
    "transactionid": { 
    "transactionReferenceNo": "xyz", 
    "amount": 11.62, 
    "transactionStatus": "SUCCESS" 
    } 
}, 
{ 
    "time": { 
    "td": 3037 
    }, 
    "creditCardType": { 
    "cardType": "MasterCard", 
    "default": false 
    }, 
    "transactionid": { 
    "transactionReferenceNo": "xyp", 
    "amount": 13.62, 
    "transactionStatus": "SUCCESS" 
    } 
    } 
] 

in diese ich habe Duplikate transactionReferenceNo in Bezug zu entfernen, denn die i Prädikat eingestellt ist als:

NSDictionary *transactionDict = [dict valueForKey:@"transactionid"]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY %K.%K CONTAINS[c] %@", @"transactionid", @"transactionReferenceNo",[transactionDict valueForKey:@"transactionReferenceNo"]];` 

dieser Wille stürzt meine Anwendung und gibt mir Fehler :

The left hand side for an ALL or ANY operator must be either an NSArray or an NSSet. 

was falsch machen m ..

Vielen Dank im Voraus.

Antwort

1
NSArray *arr = @[ 
       @{ 
        @"time": @{ 
         @"td": @3036 
        }, 
        @"creditCardType": @{ 
         @"cardType": @"MasterCard", 
         @"default": @NO 
        }, 
        @"transactionid": @{ 
         @"transactionReferenceNo": @"xyz", 
         @"amount": @(11.62), 
         @"transactionStatus": @"SUCCESS" 
        } 
       }, 
       @{ 
        @"time": @{ 
         @"td": @3037 
        }, 
        @"creditCardType": @{ 
         @"cardType": @"MasterCard", 
         @"default": @NO 
        }, 
        @"transactionid": @{ 
         @"transactionReferenceNo": @"xyp", 
         @"amount": @(13.62), 
         @"transactionStatus": @"SUCCESS" 
        } 
       } 
       ]; 

NSPredicate *predicate = [NSPredicate predicateWithFormat: 
          @"transactionid.transactionReferenceNo CONTAINS[c] %@", 
          @"xyp"]; 

NSArray *arr2 = [arr filteredArrayUsingPredicate:predicate]; 
NSLog(@"arr2 = %@", arr2); 

In Ihrem Fall das Prädikat so sein sollte:

NSPredicate *predicate = [NSPredicate predicateWithFormat: 
          @"transactionid.transactionReferenceNo CONTAINS[c] %@", 
          transactionDict[@"transactionReferenceNo"]]; 
+0

Dies funktioniert .. Danke Michael – PiyushRathi

0

Versuchen Sie, diese

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"transactionid %K.%K CONTAINS[c] %@", @"transactionid", @"transactionReferenceNo",[transactionDict valueForKey:@"transactionReferenceNo"]]; 
+0

nicht lösen, das in Prädikat Objekt abstürzt .. – PiyushRathi

+0

Siehe bearbeitet Antwort –

Verwandte Themen