2011-06-08 54 views
0

我正在尋找可以移動一些共享代碼的基本模式。我有一個存儲在Core Data中的NSManagedObject PurchaseOrder。這可以在幾個不同的視圖中進行編輯和更改。大多數情況下,它始終是相同類型的更改,PurchaseOrder會使用另一個NSManagedObject客戶端的數據更新。共享方法來更新核心數據NSManagedObject?

我想這種類型的代碼移動到一個地方,所以我可以調用類似:

-(void) updatePurchaseOrder: (PurchasOrder *) aPurchaseOrder withClient:(Client *) aClient withManagedObjectContext: (NSManagedObjectContext *) aManagedObjectContext { 
// update code goes here 
} 

這是一個壞主意,或者是一個災難?我有我使用的已經是一個共享的實例類(以下位的小點點):

static SharedFunctions* singletonInstance = nil; 

-(id)init 
{ 
    if ((self = [super init])) 
    { 

    } 
    return self; 
} 


+(SharedFunctions*)sharedInstance 
{ 
    @synchronized(self) { 
     if (singletonInstance == nil) 
     { 
      singletonInstance = [[SharedFunctions alloc] init]; 
     } 
    } 
    return singletonInstance; 
} 

我稱之爲功能是這樣的:

[[[SharedFunctions] sharedInstance] myMethod]; 

這一直是我運作良好。思考?

+3

如果你正在傳遞一切必要的參數,爲什麼單身的開銷?只需創建一個類方法。 – 2011-06-08 16:48:16

回答

2

您的updatePurchaseOrder方法在哪裏定義?在這種情況下,我會創建一個NSManagedObject的自定義PurchaseOrder子類並實現一個updateWithClient方法。

@interface PurchaseOrder : NSManagedObject { 
} 

-(void)updateWithClient:(Client *)client; 

@end 

所以你可以簡單地打電話[aPurchaseOrder updateWithClient:aClient];你需要的地方。似乎更多的面向對象,除非我失去了一些東西?

如果您還沒有爲PurchaseOrder創建自定義子類,那麼您可以在NSManagedObject的類別中執行相同的操作。

+0

不錯的乾淨簡單的想法,不知道爲什麼我沒有想到 - 這就是我在c#中所做的 - 謝謝! – Slee 2011-06-17 00:44:22

相關問題