cocoa - Chaining replacements don't work in NSPredicate -
निम्नलिखित कोड एक प्रश्न उठाता है
NSPredicate * myPred = [NSPredicate predicateWithFormat: @ " $ My_var.employees। @ Count == 3 "]; NSExpression * myExpr = [NSExpression अभिव्यक्ति फोरेकेपथ: @ "$ my_var.test"]; NSPredicate * myPredBis = [myPred predicateWithSubstitutionVariables: @ {@ "my_var": myExpr}]; NSExpression * myExpr2 = [NSExpression अभिव्यक्ति फोरेकेपाथ: @ "स्व"]; NSPredicate * myFinalPred = [myPredBis predicateWithSubstitutionVariables: @ {@ "my_var": myExpr2}]; एनएसएलॉग (@ "% @", माइफ़नलपेड); यह प्रिंट करता है
$ my_var.test.employees। @ Count == 3 लेकिन हम चाहेंगे
self.test.employees। @ Count == 3 ऐसा क्यों होता है?
यह केवल एक आंशिक उत्तर है, लेकिन शायद यह आपको सही रास्ते पर लाने में मदद करता है।
सबसे पहले, $ my_var प्रतिस्थापन द्वारा [NSExpression expressionForKeyPath: @ "$ my_var.test"] काम नहीं करता है, क्योंकि बाद के अभिव्यक्ति का एक सरल कुंजी के रूप में $ my_var व्यवहार करता है, नहीं NSPredicate * myPred = [NSPredicate predicateWithFormat: @ "$ $ $ My_var.employees। @ Count == 3 "]; NSExpression * myExpr = [NSExpression अभिव्यक्ति के लिए: @ "another_var"]; NSPredicate * myPredBis = [myPred predicateWithSubstitutionVariables: @ {@ "my_var": myExpr}]; दूसरा, [NSExpression expressionForKeyPath: @ "स्व"] एक साधारण कुंजी के रूप में "आत्म" व्यवहार करता है, "the" स्वयं , जिस पर वस्तु को लागू किया जाता है उस वस्तु का अर्थ है आप शायद चाहते हैं: <पूर्व> NSExpression * myExpr2 = [NSExpression अभिव्यक्ति फोरेमेटेड ऑब्जेक्ट]; इसके बजाय अब आप प्रतिस्थापन चेन कर सकते हैं: <पूर्व> NSPredicate * myFinalPred = [myPredBis predicateWithSubstitutionVariables: @ {@ "another_var": myExpr2}]; एनएसएलॉग (@ "% @", माइफ़नलपेड); आउटपुट: कर्मचारी। @ Count == 3 ("स्व" हिस्सा अभी मुद्रित नहीं है)।
ठीक है , यहां आपकी समस्या का समाधान है मुश्किल भाग दूसरा कदम है। एक सामान्य कुंजी ( test ) के साथ एक वैरिएबल ( $ my_var ) के होते हुए कुंजी-पथ अभिव्यक्ति बनाने के लिए मुझे कोई सीधा रास्ता नहीं मिला। लेकिन यह एक बिंदु के बाएं हाथ को ले कर किया जा सकता है: NSPredicate * myPred = [NSPredicate predicateWithFormat: @ "$ my_var.employees। @ Count == 3"]; एनएसएलॉग (@ "% @", मायप्रेड); // $ my_var.employees @ count == 3 NSExpression * myExpr = [[NSComparisonPredicate *] [NSPredicate predicateWithFormat: @ "$ my_var.test == 0"] छोड़ दिया अभिव्यक्ति]; NSPredicate * myPredBis = [myPred predicateWithSubstitutionVariables: @ {@ "my_var": myExpr}]; NSLog (@ "% @", myPredBis); // $ my_var.test.employees। @ गिनती == 3 एनएसईxpression * myExpr2 = [NSExpression अभिव्यक्ति फोरेमेटेड ऑब्जेक्ट]; NSPredicate * myFinalPred = [myPredBis predicateWithSubstitutionVariables: @ {@ "my_var": myExpr2}]; एनएसएलॉग (@ "% @", माइफ़नलपेड); // test.employees। @ Count == 3
Comments
Post a Comment