2011-05-09 85 views
0

我需要此操作bsc方法接收ID,我喜歡用點語法來設置對象。 目前我這樣做。但也許有人知道更優雅的方式?從ID更改類型到子類nsmanagedobject

-(NSError *) updateObject:(id)object operation:(NSInteger)operation; 
{ 
CurrentCompany *obj1 = nil; 
... 
CompanyStuff *obj2 = nil; 


if ([[[(CurrentCompany *)object entity] name] isEqualToString:@"CurrentCompany"]) obj1 = (CurrentCompany *)object; 
if ([[[(CompanyStuff *)object entity] name] isEqualToString:@"CompanyStuff"]) obj2 = (CompanyStuff *)object; 

NSLog(@"UpdatedObject:%@",obj1); 

回答

1

如果這些類符合公共協議或從聲明的屬性的通用超繼承,可以只是靜態地鍵入變量作爲該協議或超類。如果這兩種情況都不是這樣,那麼似乎不應該將它們交換使用。

另外,這並不是真正相關的,但從id到特定類的明確演員表是毫無意義的。你可以分配。

+0

@Chunk和平的代碼讚賞。你的意思是像CurrentCompany * obj1 =&object? – Alex 2011-05-09 22:38:28

+0

@Alex:'object'已經包含一個指向對象的指針。 '&object'是一個指向'object'變量的指針,而不是一個對象。嘗試將該指針指定給一個類型爲變量的指針,該指針指向一個對象(例如'CurrentCompany *')將導致問題。 – 2011-05-10 07:00:47

+0

@Peter Hosey我可以期待什麼樣的問題? – Alex 2011-05-10 20:19:55