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

Popular posts from this blog

c - Mpirun hangs when mpi send and recieve is put in a loop -

python - Apply coupon to a customer's subscription based on non-stripe related actions on the site -

java - Unable to get JDBC connection in Spring application to MySQL -