我最近将我的iOS应用程序项目更新到iOS 10.现在我正在尝试更改我的应用程序的核心数据模型,但Xcode生成的新NSManagedObject子类已损坏.我也尝试修复子类手册,但这不起作用.
Core Data Model的最小工具版本设置为Xcode 7.0,代码生成语言设置为Swift.
这是Xcode生成的代码:
import Foundation
import CoreData
import
extension Group {
@nonobjc public class func fetchRequest() -> NSFetchRequest {
return NSFetchRequest(entityName: "Group");
}
@NSManaged public var name: String?
@NSManaged public var platform: NSNumber?
@NSManaged public var profiles: NSOrderedSet?
}
// MARK: Generated accessors for profiles
extension Group {
@objc(insertObject:inProfilesAtIndex:)
@NSManaged public func insertIntoProfiles(_ value: SavedProfile, at idx: Int)
@objc(removeObjectFromProfilesAtIndex:)
@NSManaged public func removeFromProfiles(at idx: Int)
@objc(insertProfiles:atIndexes:)
@NSManaged public func insertIntoProfiles(_ values: [SavedProfile], at indexes: NSIndexSet)
@objc(removeProfilesAtIndexes:) …
Run Code Online (Sandbox Code Playgroud) 我在各种场合遇到过这个关键字.我知道它应该做什么.但我真的想要更好地理解它.
我注意到的@NSManaged
- 不是基于文档,而是通过重复使用:
@dynamic
Objective-C(我不太了解)PFObject
从Parse SDK
.它通常使用KVC从后端读取/写入值.@NSManaged
如果我没有在初始化程序中初始化,那么为任何变量添加前缀将关闭编译器.正式定义(在核心数据Apple Docs中):
Core Data提供NSManagedObject类的子类中的属性的底层存储和实现.在托管对象子类中的每个属性定义之前添加@NSManaged属性,该属性对应于Core Data模型中的属性或关系.与Objective-C中的@dynamic属性一样,@ NSManaged属性通知Swift编译器将在运行时提供属性的存储和实现.但是,与@dynamic不同,@ NSManaged属性仅适用于Core Data支持.
我从那得到了什么:
使用变量
@NSManaged
应是从编译时检查豁免的东西.
我已经阅读了关于此事的正式文件和其他各种SO问题:
@synthesize vs @dynamic,有什么区别?
我本能地认识到我应该使用它的一些场景.我部分知道它的作用.但我所追求的是对它的作用的更纯粹的理解.
进一步观察:
一个PFObject
在Parse SDK
依赖于Key Value Coding
访问它的值.本PFObject
提供了以下存取:
objectForKey:
let score = results.objectForKey("descriptionOfResult")
//returns the descriptionOfResult value from the results object
Run Code Online (Sandbox Code Playgroud)
setObject:forKey:
results.setObject("The results for a physics exam", forKey: "descriptionOfResult")
//sets the value of …
Run Code Online (Sandbox Code Playgroud) 我开始尝试使用swift 3和Xcode 8 beta的Core数据.当我尝试从核心数据模型生成NSManagedObject子类并在编辑器菜单中创建NSManagedObject子类...选项时,Xcode 8 beta生成三个文件,其中一个是_COREDATA_DATAMODELNAME_ + CoreDataModel.swift,其中包含以下内容:
import Foundation
import CoreData
___COREDATA_DATAMODEL_MANAGEDOBJECTCLASSES_IMPLEMENTATIONS___
Run Code Online (Sandbox Code Playgroud)
此外,此文件的内容显示两个警告:
Expressions are not allowed at the top level.
Use of unresolved identifier '___COREDATA_DATAMODEL_MANAGEDOBJECTCLASSES_IMPLEMENTATIONS___'
Run Code Online (Sandbox Code Playgroud)
有没有人面临同样的问题?这个新文件的含义是什么?
谢谢