gpt4 book ai didi

ios - 在 NSManagedObject 类中初始化 @NSManaged 变量?

转载 作者:行者123 更新时间:2023-11-29 01:32:17 26 4
gpt4 key购买 nike

我正在将用 Swift 编写的项目转换为使用 CoreData。一切正常,除了现在我正在尝试将自定义类转换为 NSManagedObject 类以将其属性存储在 CoreData 中。它看起来像这样:

import UIKit
import CoreData

class Jar: NSManagedObject {

@NSManaged var name: String
@NSManaged var jarDescription: String
@NSManaged var jarType: UIImage
@NSManaged var progress: Int
@NSManaged var jarSize: Int

/*
init() {

name = "Some Jar"
jarType = UIImage(named: "EmptyJar3.png")
progress = 0
jarSize = 60
jarDescription = ""

*/

}

我已经注释掉了 init(),因为根据我的阅读,您不能在 NSManagedObject 上使用初始化方法。但是,我的项目中的其他地方有代码实例化 Jar 类型的对象,对于未明确为此类设置的属性,我希望为这些属性设置某种默认初始值。

有没有办法在 class Jar: NSManagedObject 中执行此操作?如果我正在编写检查方法以查看是否设置了属性,然后将它们显式保存到 CoreData,我在任何地方实例化一个新的 Jar 对象,这似乎会变得非常困惑。

最佳答案

如果您从 Objective-C 移植应用程序,那么为什么不直接执行您的 ObjC 代码所做的事情(显然,它没有实现 -init)。

可以提供您自己的自定义 init 方法,但您必须确保 initWithEntity:insertIntoManagedObjectContext: 被正确调用并且您最好仔细阅读文档。

可以覆盖awakeFromInsert和/或awakeFromFetch,但您应该了解这样做涉及的一些特殊情况。

我发现,一般来说,如果您希望进行特殊初始化,那么您最好编写工厂方法。我相信你可以用 swift 中的“类方法”做同样的事情,但我还没有理由写任何 swift,所以我不知道 swift,所以我将在 ObjC 中给出例子,您可以解释其余部分。

例如……

+ (NSString*)entityName
{
return @"Jar";
}

+ (instancetype)jarWithName:(NSString*)name
imageName:(NSString*)imageName
size:(NSUInteger)size
inManagedObjectContext:(NSManagedObjectContext*)context
{
Jar *jar = [NSEntityDescription
insertNewObjectForEntityForName:[self entityName]
inManagedObjectContext:context];
jar.name = name;
jar.jarDescription = @"";
jar.jarType = [UIImage imageNamed:imageName];
jar.progress = 0;
jar.jarSize = size;
return jar;
}

+ (instancetype)jarInManagedObjectContext:(NSManagedObjectContext*)context
{
return [self jarWithName:@"Some Jar"
imageName:@"EmptyJar3.png"
size:60
inManagedObjectContext:context];
}

关于ios - 在 NSManagedObject 类中初始化 @NSManaged 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33332918/

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