我有一個包含多個用戶對象類,並因此具有它們的陣列作爲一個實例變量:@dynamic屬性需要設置器與多個行爲
NSMutableArray *users;
棘手的部分是設置它。我通過Objective Resource從服務器反序列化這些對象,而對於後端原因,用戶只能作爲UID的長字符串返回 - 我在本地使用的是用戶鍵入UID的單獨字典。鑑於串uidString逗號分離的UID我重寫默認的setter和填充實際的用戶對象:
@dynamic users;
- (void)setUsers:(id)uidString {
users = [NSMutableArray arrayWithArray:
[[User allUsersDictionary] objectsForKeys:[(NSString*)uidString componentsSeparatedByString:@","]]];
}
問題是這樣的:我現在用SQLitePO,存儲這些作爲數組序列化這些數據庫用戶對象,而不是原始字符串。因此,當我從數據庫中檢索它時,setter錯誤地將這個用戶對象數組視爲一個字符串!當我從數據庫和網絡中獲取這個對象時,我實際上想要調整setter的行爲。
我不能讓getter序列化回一個字符串,而不會撕毀引用這個用戶對象數組的大代碼,並且試圖在setter中檢測是否有字符串或數組進入:
if ([uidString respondsToSelector:@selector(addObject)]) {
// Already an array, so don't do anything - just assign users = uidString
但沒有成功......所以我有點卡住了 - 有什麼建議嗎?提前致謝!
感謝帕維爾 - 它現在使用你的第二個建議。如果([uidString class] == [NSString class])沒有意識到「isKindOfClass」是正確的方式,我最初嘗試過的第二個建議(以noob方式) – ambertch 2010-05-26 20:18:07