ဒီနေ့တော့ တနေကုန်သွားတယ်။ NSMutableArray ထဲမှာ NSObject ထည့်ပြီးတော့ NSUserDefaults ထဲမှာ သိမ်းတာ လုံးဝကို မရဘူး ဖြစ်နေတယ်။ အစက NSMutableArray က သိမ်းမရဘူး ဖြစ်တာ ထင်ပြီး အဲဒီ keyword နဲ့လိုက်ရှာပြီး ဖြေရှင်းကြည့်သေးတယ်။ ပြီးမှစဉ်းစားမိတယ်။ အကြမ်းရေးထားတုန်းက NSMutableArray ပါပဲ။ ဒါပေမယ့် NSObject မသုံးထားတာပဲ ရှိတယ်ဆိုပြီး စဉ်းစားမိပါလေကော။ အဲဒါ စဉ်းစားမိချိန်ကလည်း ညရောက်နေပြီ။ မနက်တုန်းက ရှာတုန်းကတော့ NSObject ကို NSUserDefaults ထဲ ထည့်လို့မရဘူး။ NSData ပြောင်း Archive လုပ်ပြီး ထည့်။ ပြီးမှ ပြန်ထုတ်တဲ့အခါမှာ NSData နဲ့ ပြန်ထုတ်။ Unarchive လုပ်။ ဘာတွေ မှန်းလဲ မသိ။
အခုမှ NSObject နဲ့ပြန်ရှာကြည့်တော့မှပဲ ဒီမှာ ရေးထားတာ တွေ့တော့တယ်။ မနက်တုန်းက NSCoder delegate ကို NSObject မှာ သုံးပြီး သူပြောထားသလို encode decode function ထည့်ရေးပေးရတယ်။
[lang name=”objc”]@interface countrydata : NSObject <NSCoding>{[/lang]
ဆိုပြီး delegate ထည့်ရေးရသလို
[lang name=”objc”]NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:cdata];[/lang]
က Archive လုပ်ပြီး NSUserDefaults ထဲမှာ သိမ်းပေးရတယ်။ ပြီးရင်
[lang name=”objc”]countrydata* cdata=(countrydata*)[NSKeyedUnarchiver unarchiveObjectWithData:myData];[/lang]
ဆိုပီး Unarchive ပြန်လုပ်ပြီး NSUserDefault ထဲကနေ NSData Object က တဆင့် ဆွဲထုတ်ရတယ်။
မနက်က ရေးလိုက်ပေမယ့် forKey ကျန်ခဲ့လို့လား မသိ။ နောက် တချက်က object release လုပ်လိုက်တာပဲ။ object က process ပြန်လုပ်တဲ့အချိန်မှာ release လုပ်ပြီးသား ဖြစ်နေတယ်။ အဲဒီတော့ object ကို ပြန်ခေါ်လိုက်တိုင်း crash ဖြစ်ဖြစ်သွားတာလည်း ပါတယ်။
အခုတော့ အဆင်ပြေသွားပြီ။ ဒီနေ့တော့ NSObject ကို NSUserDefaults ထဲမှာ သိမ်းနည်းတော့ ကောင်းကောင်းကြီးကို သိသွားရပြီ။ အချိန်လည်း ၁ ရက်ကျော်လောက်ပေးလိုက်ရတယ်။
Leave a Reply