【问题标题】:Singleton Entity in CoreDataCoreData 中的单例实体
【发布时间】:2011-05-13 09:04:35
【问题描述】:

我可能在标题中使用单例一词时的术语不正确。 我现在正在寻找一种好的技术。我有一个名为 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
    }

【问题讨论】:

    标签: iphone cocoa-touch core-data


    【解决方案1】:

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

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

    【讨论】:

    • 这是一个非常好的解决方案。我之前实际上使用过那个宏,完全忘记了它。
    • Matt Gallager 的文章中似乎没有任何特定于 Core Data 的内容。
    • 同意,这个答案与核心数据无关,如果您是否可以使用约束来确保数据存储中仅存在特定实体的一个实例,它应该真正解决什么问题。
    【解决方案2】:

    您的方法应该行得通,而且它的好处是灵活。考虑您的应用程序的未来版本是否能够管理多个帐户;如果您将“单例”建模为常规实体,您可以轻松实现这一点。

    如果您 100% 确定您永远不会想要这样,您可以使用持久存储的 metadata 属性来处理类似的事情。

    【讨论】:

    • 我不知道持久存储元数据。立即查看
    猜你喜欢
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-26
    • 1970-01-01
    相关资源
    最近更新 更多