2011-05-13 65 views
6

我可能會在使用單詞singleton的標題中使用我的術語不正確。 我現在在尋找一種很好的技術。我有一個名爲user的實體,用於存儲用戶登錄的數據,例如用於發出服務器請求的會話密鑰。我只想讓這些實體中的一個存在。有這樣的標準技術嗎?CoreData中的單身實體

我有什麼到目前爲止是這樣的

NSManagedObjectContext *moc = [self managedObjectContext]; 
    NSEntityDescription *entityDescription = [NSEntityDescription 
               entityForName:@"UserEntity" inManagedObjectContext:moc]; 
    NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease]; 
    [request setEntity:entityDescription]; 


NSArray *array = [moc executeFetchRequest:request error:&error]; 
    if (array == nil) 
    { 
     // Deal with error... 
    } 

    if ([array count]==0) { 
     //first run of app 

    }else if([array count]==1) 
    { 
     // id like the code to enter here after every app run except for the first one 

    }else 
    { 

     //dont want this to happen 
    } 

回答

3

我使用Matt Gallagher的文章Singletons, AppDelegates and top-level data中描述的方法。

它使用宏創建一個「合成單例」類,然後您可以從任何地方訪問。對於會話,託管對象上下文等等非常方便。否則,您必須在各處傳遞這些信息。

+0

這是一個非常好的解決方案。我之前已經使用過這個宏,完全忘了它。 – dubbeat 2011-05-13 10:31:43

+1

在Matt Gallager的文章中似乎沒有任何特定於Core Data的內容。 – ThomasW 2016-03-18 08:37:02

+0

一致認爲,這個答案與Core Data無關,如果您是否可以使用約束來確保數據存儲中只存在一個特定實體的實例,它應該真正解決該問題。 – 2017-11-09 01:33:57

2

你的方法應該工作,所以它具有靈活的優勢。考慮未來版本的應用有可能管理多個帳戶;如果您將「單身人士」塑造爲常規實體,則可以輕鬆實現此目的。

如果你100%確定你永遠不會想要這樣,你可以使用持久存儲的metadata屬性來做這樣的事情。

+0

我不知道持久性存儲元數據。現在檢查它 – dubbeat 2011-05-13 09:28:02