2011-03-30 17 views
9

में परिवर्तन करने पर कैसे पता चलेगा कि मैंने उपयोगकर्ता को आईफोन के सेटिंग क्षेत्र में अपनी सेटिंग्स में बदलाव करने दिया है। अगले नेटवर्क सिंक के दौरान मैं सर्वर में उपयोगकर्ता परिवर्तन भेजना चाहता हूं। लेकिन केवल तभी परिवर्तन किए जाते हैं।उपयोगकर्ता को सेटिंग्स बंडल

लेकिन मुझे कैसे पता चलेगा कि उपयोगकर्ता ने सेटिंग क्षेत्र में बदलाव कब किया है?

यदि मैं कर सकता हूं, तो मैं हमेशा सर्वर से जानकारी को बदलकर या नहीं, या उपयोगकर्ता डिफ़ॉल्ट से अलग होने पर अपडेट करने के बावजूद जानकारी भेजने के विकल्प से बचना चाहता हूं।

क्या इस समस्या को हल करने का एक अच्छा और सुरुचिपूर्ण तरीका है? आपकी मदद के लिए धन्यवाद!

एक सप्ताह बाद और कोई जवाब नहीं ... क्या यह प्रश्न बहुत कठिन है या यह कोई समझ नहीं आता है?

उत्तर

16

आह मुझे मूर्खतापूर्ण! यहां हम एक सुरुचिपूर्ण तरीके से जाते हैं। एक्सकोड के भीतर ऐप्पल दस्तावेज़ीकरण में AppPrefs के लिए खोजें और यह एक उदाहरण ऐप दिखाएगा जो वास्तव में आप करना चाहते हैं। बस संकलित और भागो! यह NSUserDefaultsDidChangeNotification का उपयोग करता है।

इस कोड को एक पर्यवेक्षक रजिस्टर करने के लिए इस्तेमाल किया जा रहा है:

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(defaultsChanged:) 
              name:NSUserDefaultsDidChangeNotification 
              object:nil]; 

पुराना जवाब:

ऐसा लगता है जैसे कि आप से बाहर एक संशोधन दिनांक मिल सकता है नहीं लगता है NSUserDefaults। अब तक मैं केवल इस तरह के बारे में सोच सकते हैं: अपने मूलभूत मूल्यों:

NSUserDefaults *previousDefaults = [someInstance previousUserDefaults]; 
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults]; 

if([previousDefaults isEqualToDictionary:currentDefaults]) 
{ 
    [someOtherInstance sendModifiedUserDefaultsToServerWithDefaults:currentDefaults]; 
    [yetAnotherInstance saveModified] 
} 

आप उपयोगकर्ता चूक जब एप्लिकेशन पहली बार शुरू की है डिस्क के लिए शब्दकोश के रूप में अपने आप को बचाने के लिए है। फिर, जब भी ऐप खोला जाता है तो आप उन दो शब्दकोशों की तुलना करते हैं। यदि वे

+0

एचएम।मुझे क्या लगता है कि एक बेहतर तरीका यह है कि जब आप अपने आईफोन पर अपनी नेटवर्क सेटिंग्स बदलते हैं, तो यह स्वचालित रूप से खोजने और उससे जुड़ने का प्रयास करता है। इसका मतलब यह होना चाहिए कि उपयोगकर्ता सेटिंग में बदलाव ने एक कार्रवाई शुरू की है। यह मेरे लिए भी एक अच्छा समाधान होगा। वे यह कैसे करते हैं? – san

+0

यहां आप समस्या के लिए एक सुरुचिपूर्ण और सरल समाधान जाओ। –

+0

ओह हाँ! यह भी खूब रही। लेकिन यह सेटिंग्स में कोई बदलाव ट्रिगर करता है। क्या केवल विशिष्ट संपत्ति परिवर्तन पर कार्य करने का कोई तरीका है? – san

2

ऐसा नहीं है कि सवाल बहुत कठिन है, यह सिर्फ इतना है कि आप जो भी पूछ रहे हैं उसे करने का एक आसान तरीका नहीं है। NSUserDefaults प्रत्येक ऐप की सेटिंग्स के लिए "आखिरी संशोधित" तिथि रिकॉर्ड नहीं करता है, कम से कम जहां तक ​​मैं कह सकता हूं, इसलिए यदि उपयोगकर्ता सेटिंग ऐप का उपयोग करके कुछ सेटिंग्स बदलता है, तो उसे देखने के अलावा अन्य का पता लगाने का कोई अच्छा तरीका नहीं है सभी सेटिंग्स।

यदि आपको वास्तव में ऐसा करने की ज़रूरत है, तो मुझे लगता है कि आपकी सबसे अच्छी शर्त उन सेटिंग्स को पढ़ने के लिए है जिन्हें आप कुछ डेटा संरचना में समन्वयित करने और उस संरचना के आधार पर किसी प्रकार के हैश या चेकसम की गणना करने में रुचि रखते हैं। उस मान की तुलना उस मान से करें जिसकी आपने पिछली बार ऐप की गणना की थी, और यदि सर्वर अलग है तो सर्वर के साथ समन्वयित करें। यदि आप चाहते हैं तो आप NSUserDefaults में उस मान को स्टोर कर सकते हैं, लेकिन यह सुनिश्चित कर लें कि आप इसे गणना में शामिल नहीं करते हैं।

+0

धन्यवाद कैलेब। मैं अपना समाधान बहुत जटिल नहीं बनाना चाहता हूं। मुझे आश्चर्य है कि इस तरह की कोई आवश्यकता नहीं थी और इस विचार का समर्थन करने के लिए लाइब्रेरी में कुछ भी नहीं है, उदाहरण के लिए, किसी बदलाव पर प्रतिक्रिया दें उपयोगकर्ता सेटिंग्स में। – san

+0

आमतौर पर, कोई एप्लिकेशन इस बात पर परवाह नहीं करता है कि इसकी वरीयताएं हाल ही में बदल गई हैं या नहीं, जब भी उन्हें किसी भी तरह की आवश्यकता होती है, तो उन्हें डिफ़ॉल्ट सिस्टम से पढ़ता है, इसलिए यदि कुछ बदल गया है, तो ऐप को स्वचालित रूप से नया मान मिल जाएगा। इसके अलावा, NSUserDefaults मैकोज़ एक्स से आता है, और उस संदर्भ में उपयोगकर्ता को किसी भी दुष्प्रभाव के साथ ऐप की प्राथमिकता फ़ाइल को हटाने में सक्षम होना चाहिए; ऐप को अपने अंतर्निर्मित डिफ़ॉल्ट पर वापस आना चाहिए। आईओएस पर भी, मैं डिफ़ॉल्ट सिस्टम में महत्वपूर्ण जानकारी संग्रहीत नहीं करता। – Caleb

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