2015-03-25 9 views
5

मैं NSPredicate उपयोग करने के लिए नीचे दिखाया गया है संरचना से सभी CustomObjects फिल्टर करने के लिए कोशिश कर रहा हूँ, और उनकी संपत्ति "isSelected" के लिए सही मूल्य होने से अपनी संपत्ति के आधार पर फिल्टर करने के लिए कस्टम वस्तुओं। मेरे पास एक नेस्टेड संरचना है जैसे: isSelectedProperty-Object-NSArray-NSDictionary-NSArrayNSPredicate नेस्टेड संरचना

[ 
    { 
    "title": "ABC", 
    "list": [ 
     <CustomObject>.isSelected = true, 
     <CustomObject>.isSelected = true, 
     <CustomObject>.isSelected = true 
    ] 
    }, 
    { 
    "title": "ABC", 
    "list": [ 
     <CustomObject>.isSelected = false, 
     <CustomObject>.isSelected = true, 
     <CustomObject>.isSelected = true 
    ] 
    }, 
    { 
    "title": "ABC", 
    "list": [ 
     <CustomObject>.isSelected = false, 
     <CustomObject>.isSelected = true, 
     <CustomObject>.isSelected = true 
    ] 
    } 
] 

ऐसे नेस्टेड संरचना से मैं सभी CustomObjectisSelected = true होने फिल्टर करने के लिए की जरूरत है। तो मेरे प्रश्न हैं,

  • क्या यह एनएसपी्रेडिकेट का उपयोग करना संभव है?
  • हाँ, तो क्या इस संरचना फिल्टर करने के लिए विधेय बयान होगा है?

कृपया कुछ समझ प्रदान करें ताकि हम समझ सकें कि वास्तव में ऐसी संरचनाओं से निपटने के लिए कैसे।

संपादित करें - बहुत समाधान

के पास googling और मुहम्मद वकास के जवाब की मदद के बाद, मैं छानने सरणी में

NSPredicate *aPredicate = [NSPredicate predicateWithFormat:@"list.isSelected CONTAINS[c] %@",@true]; 
NSArray *aArray = [mutArrContacts filteredArrayUsingPredicate:aPredicate]; 
NSArray *UnWrapped = [aArray valueForKey:@"list"]; 



<__NSArrayI 0x7fc969cde360>(
<__NSArrayM 0x7fc969f54a10>(
<ContactData: 0x7fc969f7a590>, 
<ContactData: 0x7fc969f8dee0> 
) 
, 
<__NSArrayM 0x7fc969f736f0>(
<ContactData: 0x7fc969f68310> 
) 
, 
<__NSArrayM 0x7fc969f737a0>(
<ContactData: 0x7fc969f70340> 
) 
, 
<__NSArrayM 0x7fc969f87430>(
<ContactData: 0x7fc969f65170> 
) 
, 
<__NSArrayM 0x7fc969f874d0>(
<ContactData: 0x7fc969f51690> 
) 

) 

का उपयोग कर नीचे के रूप में सफल लेकिन अब मैं इस वस्तुओं फिल्टर करने के लिए संघर्ष कर रहा हूँ

(
<ContactData: 0x7fc969f7a590>, 
<ContactData: 0x7fc969f8dee0>, 
<ContactData: 0x7fc969f68310>, 
<ContactData: 0x7fc969f70340>, 
<ContactData: 0x7fc969f65170>, 
<ContactData: 0x7fc969f51690> 
) 

उत्तर

5

हाँ आप एनएसपीडिकेट का उपयोग करके कस्टम ऑब्जेक्ट्स को फ़िल्टर कर सकते हैं जैसे

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY list.isSelected = %@",@true]; 
NSArray *filteredArry=[[json filteredArrayUsingPredicate:predicate] copy]; 

आशा है कि यह आपकी मदद करेगा।

+0

यह क्रैश हो रहा है। 'न आया हुआ अपवाद 'NSUnknownKeyException', कारण की वजह से एप्लिकेशन समाप्त: '[<संपर्क डाटा 0x7ff74ea48320> valueForUndefinedKey:]:। इस वर्ग है नहीं कुंजी मान कोडिंग अनुरूप कुंजी संपर्क डेटा के लिए' ' यहाँ संपर्क डाटा NSObject के उपवर्ग है और MyQuestion में CustomObject के रूप में भेजा गया है। – Mrug

+0

मैं संपादित किया है मेरा उत्तर कृपया यह जाँच –

+0

का उपयोग करते हुए 'NSPredicate * aPredicate = [NSPredicate predicateWithFormat: @" list.isSelected शामिल हैं [सी]% @ ", @ सच];' मैं बहुआयामी में सरणी लेकिन इसकी फ़िल्टर किया पाने के लिए कर रहा हूँ, लेकिन मैं इसे एकल ऐरे में लाने की कोशिश कर रहा हूं। मेरा मुद्दा मिल रहा है? – Mrug

संबंधित मुद्दे