由於最近工作需求有用到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
2014年7月24日 星期四
[Objective-C]將自製物件轉成 NSData 與從NSData轉回原物件
2014年7月1日 星期二
[Swift]Objective-C 和swift混合模式(mix)
swift問世後,想要改寫swift但是又礙於很多慣用的工具和class都是Objective-C版的,
重寫又太麻煩,幸好有一種叫混合模式的東西。
可以讓你沿用原本寫的工具,然後透過bridge自動變成swift的格式使用。
(在這裡不討論怎麼轉的,提供怎麼實作的簡單教學。)
1. 首先,開一個swift專案 (或者沿用舊的專案也無妨)![]()
2. 把你要使用的Objective-C檔案的.h 和.m檔拉到專案中,除了會問你要不要複製到專案中外,還會多跳一個視窗。
簡單來說問你要不要建一個bridge header,選YES![]()
3. 然後可以注意到在 supporting files裡面多了一個檔案
4. 修改bridging-Header.h檔案內容,import 要用的.h檔
5. 然後就可以在swift裡面使用這個class了![]()
缺點:
針對DataSource/Delegate的部分,@protocol的func的自動補完好像有點怪怪的,有的時候可以靠按ESC跳出來,有的時候則否。
原因還在研究中。
不過一些功能的,就算是objective-c的一樣可以使用,可以節省不少開發時間。
訂閱:
意見
(
Atom
)