Iphone CoreData中的单例实体

Iphone CoreData中的单例实体,iphone,cocoa-touch,core-data,Iphone,Cocoa Touch,Core Data,我可能会在标题中使用singleton一词,使我的术语不正确。 我现在正在寻找一种好的技术。我有一个名为user的实体,它存储用户登录的数据,例如用于发出服务器请求的会话密钥。我只希望这些实体中有一个永远存在。有没有一个标准的技术来做这件事 到目前为止,我得到的是这样的东西 NSManagedObjectContext *moc = [self managedObjectContext]; NSEntityDescription *entityDescription = [NSEntit

我可能会在标题中使用singleton一词,使我的术语不正确。 我现在正在寻找一种好的技术。我有一个名为user的实体,它存储用户登录的数据,例如用于发出服务器请求的会话密钥。我只希望这些实体中有一个永远存在。有没有一个标准的技术来做这件事

到目前为止,我得到的是这样的东西

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
    }

你的方法应该有效,它的好处是灵活。考虑一下你的应用程序的未来版本有能力管理多个帐户的可能性;如果您将“singleton”建模为一个常规实体,则可以轻松实现这一点


如果你100%确信自己永远不会想要这样的东西,你可以使用持久存储的
元数据
属性来处理类似的事情。

我使用Matt Gallagher在文章中描述的方法


它使用一个宏来创建一个“合成单例”类,然后您可以从任何地方访问该类。对于会话、托管对象上下文等非常方便。否则,您必须到处传递这些信息。

我不知道持久存储元数据。现在就检查一下,这是一个非常好的解决方案。我以前确实用过这个宏,完全忘记了。马特·加拉格的文章中似乎没有任何关于核心数据的具体内容。我同意,这个答案与核心数据无关,如果您是否可以使用约束来确保数据存储中只存在特定实体的一个实例,那么它应该真正解决什么问题。