Coredata Relationship Issue

CoreData one-to-many relationship. Problem with NSSet attribution

use (parentFolders?.propertys?.allObjects as? [Property]) to access the objects as an Array<Property>

Core Data Relationship data not being saved

You will first need to insert the ent2 in the same way as ent1

 let ent2 = NSEntityDescription.insertNewObjectForEntityForName("Ent2".....

ent2.info = "Info"

then,

 ent1.ent2 = ent2

than call the save

CoreData one-to-many and inverse relationship problem

There are different possibilities. If you already have a Category object (for instance obtained through a fetch request), and assuming the variables

Category *category;
Item *item;

then you simply do the following:

item.category = category;

or

[category setValue: category forKey:@"category"];

and you are done, since Core Data automatically sets the inverse relationships.

If you do not have a Category object, or you want to insert a new one, do the following:

// Create a new instance of the entity 
Category *category = (Category *) [NSEntityDescription insertNewObjectForEntityForName:@"Category" inManagedObjectContext:managedObjectContext];
// add all of the category properties, then set the relationship
// for instance set the category name
[category setValue:@"myCategoryName" forKey:@"name"];
[category setValue:item forKey:@"item"];

Then you set this Category object for your Item object exactly as before.
Finally, the methods you have shown are not used behind the scenes by Core Data: these methods are available to you, so that you can also do the following:

[category addItemObject:item];

or the inverse:

[item addCategoryObject:category];

Core Data not saving the relationship

If each Folder can have many Dates, you need to set the dates relationship to be "to many".

When you set the Date object's folder property, CoreData sets the corresponding inverse relationship, ie. setting the Folder object's dates property. Because you have defined this as "to one", CoreData has to remove any existing Date for that folder. Hence the folder property for that existing Date is set to nil (which is what your fetch shows).

If you redefine the relationship as "to many", CoreData will use an NSSet for the dates property, so it can keep track of several different Dates for the same Folder.

Core Data Relationship Fault

A fault in Core Data is not an error, it just means that the what you are trying to access hasn't been retrieved from the database yet. If you do something like [fetchResults valueForKey:@"name"] it will fire and you should get what you expect. It shouldn't be a problem with your relationship model.

By the way, "minCount 0, maxCount 0" seems weird. Is that really what you want? minCount of 0 and maxCount of 1 should make more sense.

CoreData breaks To-Many relationship when entity assigned to multiple parents

This seems to be some sort of inconsistency somewhere deep in the CoreData code. I can't find any other reasonable explanation except a bug in CoreData.

Having inverse To-Many relationship on Item seems to cover the bug.

Update CoreData relationship object in SwiftUI

TextField expects Binding, but your calculable parentsArray provides CoreData objects.

It is better to separate TextField into standalone view with observed Parent, like

struct ParentView: View {
@ObservedObject var parent: Parent // allows binding

var body: some View {
TextField("Name", text: $parent.firstName)
}
}

and then use it in section, like

ForEach(viewModel.kid.parentsArray) { parent in
Section(header: Text("Parent \(parent.position)")) {
ParentView(parent: parent)
}
}

Core data Relationship in swift

If the relationship of FolderContent and FolderList is defined as

  • A FolderContent have many FolderList(s)
  • A FolderList only belongs to a FolderContent

FolderContent

Sample Image

extension FolderContent {
@NSManaged var contentID: NSNumber?
@NSManaged var contentTitle: String?
@NSManaged var contentType: String?
@NSManaged var publishDate: String?
@NSManaged var folderList: Set<FolderList>?
}

FolderList

Sample Image

extension FolderList {
@NSManaged var folderID: NSNumber?
@NSManaged var folderName: String?
@NSManaged var folderDetail: FolderContent?
}

Let say you want to persist the record and its relationship

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)")
}
}


Related Topics



Leave a reply



Submit