我有一个具有单个可转换属性的Core Data模型.我也有这个属性使用自定义NSValueTransformer,在模型中正确设置.
当我使用mogenerator生成/更新我的机器和人类文件时,包含该属性的实体的机器文件总是将属性键入NSObject.为了使Core Data能够使用我的自定义值转换器,此类型必须是变换器可以理解的类型.现在,我通过使用正确的类型重新定义属性,在人工文件中手动执行此操作.这样做可以让变压器工作.但是,我最终得到了几个关于重新定义属性的编译警告.
该版本中指定的最近发布的mogenerator之一指出,现在支持可转换属性.但是,我没有找到任何示例语法来启用此功能.
我收到此 CoreData 错误。我不知道为什么会出现此错误。我没有使用任何 Transformable 类型。我在我的代码中没有看到任何表明我正在使用可转换属性的内容。我在创建项目时通过选择“使用核心数据”选项让 Xcode 设置核心数据。其他类似的问题无济于事,因为答案与代码有关,这些代码看起来像我在创建项目时可以找到的 Xcode 创建的任何内容。当调试窗口中出现此错误时,项目不会崩溃。我正在使用 Xcode 11.3 和适用于 iOS 12 的 iOS 版 Google Maps SDK,它在装有 iOS 13.3 的 iPhone 8 设备上运行。
CoreData: annotation: Failed to load optimized model at path '/var/containers/Bundle/Application/A2B8A56C-E0D5-467A-9300-8EDFB20574BE/Routes.app/GoogleMaps.bundle/GMSCacheStorage.momd/StorageWithTileProto.omo'
2020-01-13 12:42:00.771883-0600 Routes[4631:1067373] [error] fault: One or more models in this application are using transformable properties with transformer names that are either unset, or set to NSKeyedUnarchiveFromDataTransformerName. Please switch to using "NSSecureUnarchiveFromData" or a subclass of NSSecureUnarchiveFromDataTransformer instead. At some point, Core Data will …Run Code Online (Sandbox Code Playgroud) 我经常使用Transformable的Core Data attributes,所以以后我可以改变它们.
但是,似乎,如果我想用来NSPredicate查找NSManagedObject,使用"uniqueKey == %@",或者"uniqueKey MATCHES[cd] %@"它不能正常工作.
它总是错过匹配的对象,直到我将匹配对象的uniqueKey的属性更改为具有类似的特定类NSString,或NSNumber.
有人可以解释使用的限制NSPredicate与Transformable属性?
当我删除包含图像的托管对象时,在外部记录中存储为可转换的值,然后我崩溃并出现此错误:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIImage _deleteExternalReferenceFromPermanentLocation]: unrecognized selector sent to instance 0xde49360'
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用带有 swift 和 CoreData 的自定义类作为可转换对象。我一直在浪费时间试图弄清楚但无法解决。我不断收到两个错误:无法将属性标记为@NSManaged,因为它的类型无法在 Objective-C 中表示,并且属性无法声明为公共,因为它的类型使用内部类型。
非常感谢您的帮助。谢谢。
我有一个名为 User 的 CoreData 对象。我还有一个名为 Site 的对象。
我不希望 Site 对象成为 CoreData 对象,因为大多数时候我创建 Site 对象时都不希望将其添加到 CoreData 上下文中。
下面您将看到“Site”类型的“primarySite”和“sites”,它是“Site”类型的数组。这两行给出了我上面列出的相同的两个错误。
用户+核心数据类
import Foundation
import CoreData
public class User: NSManagedObject {
}
Run Code Online (Sandbox Code Playgroud)
用户+核心数据属性
import Foundation
import CoreData
extension User {
@nonobjc public class func fetchRequest() -> NSFetchRequest<User> {
return NSFetchRequest<User>(entityName: "User");
}
@NSManaged public var firstName: String?
@NSManaged public var lastName: String?
@NSManaged public var role: String?
@NSManaged public var primarySite: Site
@NSManaged public var …Run Code Online (Sandbox Code Playgroud) 我有一个核心数据实体Person,具有age类型的可转换属性Age.
final class Person: NSManagedObject {
@NSManaged public fileprivate(set) var age: Age
}
Run Code Online (Sandbox Code Playgroud)
Age采用了NSCoding协议,有两个变量value和scale,但只有value保存:
class Age: NSObject, NSCoding {
@objc public var value: Double
public var scale = 1.0
override public var description: String {
return "\(scale * value)"
}
func encode(with aCoder: NSCoder) {
aCoder.encode(value, forKey: #keyPath(value))
}
public convenience required init?(coder aDecoder: NSCoder) {
self.init(value: aDecoder.decodeDouble(forKey: #keyPath(value)))
}
init(value: Double) {
self.value = …Run Code Online (Sandbox Code Playgroud) 我有一个具有可转换属性的实体。它是一个自定义对象数组,Reminder用于确认NSSecureCoding.
@objc(Reminder)
public class Reminder: NSObject, NSSecureCoding {
public static var supportsSecureCoding: Bool = true
public var date: Date
public var isOn: Bool
public init(date: Date, isOn: Bool) {
self.date = date
self.isOn = isOn
}
struct Keys {
static var date: String = "date"
static let isOn: String = "isOn"
}
public func encode(with aCoder: NSCoder) {
aCoder.encode(date as NSDate,forKey: Keys.date)
aCoder.encode(isOn,forKey: Keys.isOn)
}
required public init?(coder aDecoder: NSCoder) {
guard let date = aDecoder.decodeObject(of: …Run Code Online (Sandbox Code Playgroud) Transformable使用 Core Data 搜索a 中是否存在数组元素的正确方法是什么NSPredicate?
我有一个Entity可操作Attribute的天数,其中Type的一个Transformable是给定的Custom Class [Int]。
我用它来存储整数数组。它可以存储,但当我EXC_BAD_ACCESS尝试使用 NSPredicate 获取它们时,我得到了
我知道
运营天数为 {1,2,3,4}
我正在尝试,但它们都因错误而失败。
//day is an Int (1) in this case
NSPredicate(format: "%d IN operationalDays",day)
NSPredicate(format: "%i IN operationalDays",day)
NSPredicate(format: "%@ IN operationalDays",day)
NSPredicate(format: "operationalDays CONTAINS %d",day)
NSPredicate(format: "operationalDays CONTAINS %i",day)
NSPredicate(format: "operationalDays CONTAINS %@",day)
Run Code Online (Sandbox Code Playgroud)
当我在崩溃后检查谓词时,我得到
谓词:(1 IN runningDays);
或者
谓词:(操作天数包含 1)