首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSManagedObject sharedInstance

NSManagedObject sharedInstance
EN

Stack Overflow用户
提问于 2016-02-07 06:20:29
回答 2查看 78关注 0票数 0

我正在努力使我的类“用户”同时成为NSManagedObject和sharedInstance。但是,当我调用我的[User sharedInstance]时,我得到了CoreData: error:未能调用NSManagedObject类上指定的'User'初始化器。

是否可以将NSManagedObject视为常规NSObjects,并在其上具有自定义属性和方法?

User.h

代码语言:javascript
复制
@interface User : NSManagedObject

@property (nonatomic, retain) NSString *Id;
@property (nonatomic, retain) NSString *lastName;
@property (nonatomic, retain) NSString *firstName;
@property (nonatomic, assign) BOOL isLoggedIn;

+ (instancetype)currentUser;

User.m

代码语言:javascript
复制
@synthesize Id;
@synthesize lastName;
@synthesize firstName;
@synthesize isLoggedIn;

+ (instancetype)currentUser {
    static id sharedInstance = nil;
    static dispatch_once_t t;
    dispatch_once(&t, ^{
        sharedInstance = [[self alloc] init];
    });

    return sharedInstance;
}
EN

回答 2

Stack Overflow用户

发布于 2016-02-07 09:38:17

我不认为托管对象和单例习语混合得很好。它们也有着本质上不同的目的,也许这就是原因。

您需要从应用程序中的任何地方访问当前用户。这是一个非常常见的用例。一个经过良好测试和清理的方法是在app委托(或您的Core数据堆栈类)中保留对对象的引用。我个人更喜欢在NSUserDefaults中存储一些惟一的ID,然后动态地从类或应用程序委托返回一个currentUser

请注意,如果使用背景上下文(单例模式不适合的另一个原因),则可能需要同一“当前用户”的多个实例。一种方便的方法是有一个class方法,它接受上下文和唯一标识符,并返回适当的User对象。

票数 1
EN

Stack Overflow用户

发布于 2016-02-07 06:43:03

看一下NSManagedObject- initWithEntity:insertIntoManagedObjectContext:文档。

重要的是,此方法是指定的NSManagedObject初始化程序。不能仅仅通过发送init来初始化托管对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35250408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档