2014年7月24日 星期四

[Objective-C]將自製物件轉成 NSData 與從NSData轉回原物件

由於最近工作需求有用到NSUserDefaults來做資料的儲存,
本來以為把平常用的NSMutableArray轉成NSArray就可以騙過她塞進去,想不到出現錯誤訊息。
說我自製的物件是non-property的,所以不給存。 囧rz

survey了一些資料後發現,如果想存的話,通常是建議先轉成NSData,
當然(NSData *)這招我try過了,當然不行。 XD

從結果來看是因為,要轉成NSData 轉的過程要讓xcode知道要用甚麼方式轉,反之亦然,從NSData轉回來時要隻到對應的型態是什麼才有辦法encode回來。

簡單來說,必須要在自定義的物件設定decode與encode的方式。
實作:
-(void) encodeWithCoder: (NSCoder *)coder{

  //self.property 換成你自定義的property的名字,例如Name,UserID
  [coder encodeObject: self.property forKey: @”property”];
  //其它的property以此類推
}
可以讓妳的物件成功傳成NSData

如果還要轉回來的話(有人不轉回來的嗎。XD)
就必須實作
- (id)initWithCoder: (NSCoder *)decoder{
  if(self = [super init]){
    self.property = [decoder decodeObjectForKey: @“property”];
    //以此類推。
  }
}

看到沒有中文的資料,就順便做個筆記,有問題也歡迎大家多多指教。 xD

沒有留言 :

張貼留言