Ios swift中的核心数据关系
我正在开发iPhone应用程序,需要实现从一个实体到另一个实体的一对多关系。我从coredata数据库导出了Ios swift中的核心数据关系,ios,iphone,swift,core-data,Ios,Iphone,Swift,Core Data,我正在开发iPhone应用程序,需要实现从一个实体到另一个实体的一对多关系。我从coredata数据库导出了NSManagedObject子类,但在核心数据模型文件(如Objective-C)中找不到关系访问器 虽然我能够在relationshipNSSet中设置数据,但这只在iPhone应用程序运行时才会持续。一旦我终止并重新启动应用程序,我就无法从核心数据中获取获取请求的实体关系 我不确定我做错了什么。如果有人能告诉我如何在NSSet关系对象中设置数据,那就太好了。任何示例都会有很大帮助 这
NSManagedObject
子类,但在核心数据模型文件(如Objective-C)中找不到关系访问器
虽然我能够在relationshipNSSet
中设置数据,但这只在iPhone应用程序运行时才会持续。一旦我终止并重新启动应用程序,我就无法从核心数据中获取获取请求的实体关系
我不确定我做错了什么。如果有人能告诉我如何在NSSet
关系对象中设置数据,那就太好了。任何示例都会有很大帮助
这是我的核心数据模型文件。一个文件夹可以包含多个内容作为文件夹详细信息
extension FolderContent {
@NSManaged var contentID: NSNumber?
@NSManaged var contentTitle: String?
@NSManaged var contentType: String?
@NSManaged var publishDate: String?
@NSManaged var folderList: NSSet?
}
extension FolderList {
@NSManaged var folderID: NSNumber?
@NSManaged var folderName: String?
@NSManaged var folderDetail: NSSet?
}
func updateFolderList()
{
// Initialize Fetch Request
let fetchRequest = NSFetchRequest()
// Create Entity Description
let entityDescription = NSEntityDescription.entityForName(FOLDER_LIST, inManagedObjectContext: self.managedObjectContext)
// Configure Fetch Request
fetchRequest.entity = entityDescription
do {
let result = try self.managedObjectContext.executeFetchRequest(fetchRequest).last as! FolderList
let content = result.mutableSetValueForKey("folderDetail")
content.addObject(self.getContent())
var folderContent:FolderContent = result.folderDetail?.allObjects.first as! FolderContent
print(folderContent.contentTitle)
self.save()
print(result)
} catch {
let fetchError = error as NSError
print(fetchError)
}
}
func getContent()->FolderContent
{
let folderContent = NSEntityDescription.insertNewObjectForEntityForName(FOLDER_CONTENT, inManagedObjectContext: self.managedObjectContext) as! FolderContent
folderContent.contentID = 1
folderContent.contentTitle = "Sandeep"
folderContent.contentType = "Product"
return folderContent
}
我猜你做了类似于folder.folderDetail.addObject的事情。核心数据不起作用,因为幕后的核心数据做了很多事情来维护图形的完整性。您必须使用
mutableSetValueForKey
获取集合,并让核心数据发挥其魔力 我猜你做了类似于folder.folderDetail.addObject的事情。核心数据不起作用,因为幕后的核心数据做了很多事情来维护图形的完整性。您必须使用mutableSetValueForKey
获取集合,并让核心数据发挥其魔力 如果FolderContent和FolderList的关系定义为
- FolderContent具有多个FolderList
- FolderList只属于FolderContent
文件夹内容
假设您希望保留记录及其关系
func persistRecords() {
// Insert the new records
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
let folderContentEntity = NSEntityDescription.entityForName("FolderContent", inManagedObjectContext: managedContext)
let folderListEntity = NSEntityDescription.entityForName("FolderList", inManagedObjectContext: managedContext)
//Create FolderContent record
let folderContentObject = FolderContent(entity: folderContentEntity!, insertIntoManagedObjectContext: managedContext)
folderContentObject.setValue(CONTENTID, forKeyPath: "contentID")
...
//Create FolderList record
let folderListObject = FolderList(entity: folderListEntity!, insertIntoManagedObjectContext: managedContext)
folderListObject.setValue(FOLDERID, forKeyPath: "folderID")
...
//Set relationship here
folderListObject.folderDetail = folderContentObject
do {
try managedContext.save()
} catch let error as NSError {
print("Could not save \(error), \(error.userInfo)")
}
}
如果FolderContent和FolderList的关系定义为
- FolderContent具有多个FolderList
- FolderList只属于FolderContent
文件夹内容
假设您希望保留记录及其关系
func persistRecords() {
// Insert the new records
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
let folderContentEntity = NSEntityDescription.entityForName("FolderContent", inManagedObjectContext: managedContext)
let folderListEntity = NSEntityDescription.entityForName("FolderList", inManagedObjectContext: managedContext)
//Create FolderContent record
let folderContentObject = FolderContent(entity: folderContentEntity!, insertIntoManagedObjectContext: managedContext)
folderContentObject.setValue(CONTENTID, forKeyPath: "contentID")
...
//Create FolderList record
let folderListObject = FolderList(entity: folderListEntity!, insertIntoManagedObjectContext: managedContext)
folderListObject.setValue(FOLDERID, forKeyPath: "folderID")
...
//Set relationship here
folderListObject.folderDetail = folderContentObject
do {
try managedContext.save()
} catch let error as NSError {
print("Could not save \(error), \(error.userInfo)")
}
}
您的意思是仅获取关系记录或保留在数据库中的全部记录失败吗?我仅获取关系记录失败。如果是这种情况,则在将记录保留到核心数据时会出现问题。请参阅。也许你可以从那里得到一些答案。我试过了,但没有成功。您能给我一些示例吗?如何更新或插入NSSet关系对象?一个FolderContent
有许多FolderList
;FolderList
属于FolderContent
。我是否正确理解了您的记录的关系?您的意思是仅获取关系记录或数据库中保留的全部记录失败吗?我仅获取关系记录失败。如果是这种情况,则在将记录保留到核心数据时存在问题。请参阅。也许你可以从那里得到一些答案。我试过了,但没有成功。您能给我一些示例吗?如何更新或插入NSSet关系对象?一个FolderContent
有许多FolderList
;FolderList
属于FolderContent
。我是否正确理解了你的记录的关系?我已经更新了我的问题。您可以检查我如何设置相关数据。我的一个问题是result.mutableSetValueForKey(“folderDetail”)如何工作核心数据如何将“folderDetail”作为可变键?这是我们需要在某个地方定义的东西吗?您必须在核心数据模型编辑器中定义您的实体和关系。否则它将永远不会起作用。我认为您必须后退一步,从一开始就阅读一些关于设置基于核心数据的应用程序的教程。在模型中定义folderDetail将是您首先要做的事情之一。您可以检查我如何设置相关数据。我的一个问题是result.mutableSetValueForKey(“folderDetail”)如何工作核心数据如何将“folderDetail”作为可变键?这是我们需要在某个地方定义的东西吗?您必须在核心数据模型编辑器中定义您的实体和关系。否则它将永远不会起作用。我认为您必须后退一步,从一开始就阅读一些关于设置基于核心数据的应用程序的教程。在模型中定义folderDetail将是您首先要做的事情之一。感谢David提供的全部详细信息。您能告诉我如何更新和删除关系对象吗?您可以从这里学习如何更新和删除方法感谢David提供的全部详细信息。您能告诉我如何更新和删除关系吗对象?您可以从这里学习如何更新和删除方法
func persistRecords() {
// Insert the new records
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
let folderContentEntity = NSEntityDescription.entityForName("FolderContent", inManagedObjectContext: managedContext)
let folderListEntity = NSEntityDescription.entityForName("FolderList", inManagedObjectContext: managedContext)
//Create FolderContent record
let folderContentObject = FolderContent(entity: folderContentEntity!, insertIntoManagedObjectContext: managedContext)
folderContentObject.setValue(CONTENTID, forKeyPath: "contentID")
...
//Create FolderList record
let folderListObject = FolderList(entity: folderListEntity!, insertIntoManagedObjectContext: managedContext)
folderListObject.setValue(FOLDERID, forKeyPath: "folderID")
...
//Set relationship here
folderListObject.folderDetail = folderContentObject
do {
try managedContext.save()
} catch let error as NSError {
print("Could not save \(error), \(error.userInfo)")
}
}