gpt4 book ai didi

ios - NSManagedObject 共享实例

转载 作者:行者123 更新时间:2023-11-29 01:15:22 25 4
gpt4 key购买 nike

我正在尝试让我的类“User”成为 NSManagedObject 并同时成为 sharedInstance。但是,当我调用我的 [User sharedInstance] 时,我得到了 CoreData: error: Failed to call designated initializer on NSManagedObject class 'User'

可以像对待常规 NSObject 一样对待 NSManagedObject 并在其上具有自定义属性和方法吗?

用户.h

@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;

用户.m

@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;
}

最佳答案

我认为托管对象单例习惯用法不能很好地混合。它们还服务于本质上不同的目的,也许这就是原因。

您需要从应用中的任何位置访问当前用户。这是一个非常常见的用例。一个经过良好测试且干净的方法是在应用程序委托(delegate)(或您的核心数据堆栈类)中保留对对象的引用。我个人更喜欢在 NSUserDefaults 中存储一些唯一的 ID,并从类或应用程序委托(delegate)动态返回 currentUser

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

关于ios - NSManagedObject 共享实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35250408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com