2012-12-10 3 views
5

Ok, also ich bin immer noch ziemlich neu in iOS und verwirrt über ein paar Dinge. Zum einen , hier sind meine Einheiten ... E.R.DNSSet Fehler beim Hinzufügen von Datensatz zu Kerndaten (to-many Beziehung)

Was ich schon drin Daten weise ist ein Obst (Apple) und eine Quelle (Baum). Sie sind beide in der Datenbank gespeichert.

Als nächstes möchte ich eine Orange hinzufügen, aber habe die Beziehung mit "Tree". Also das ist, was ich verwende:

Fruit *fruit = (Fruit *)[NSEntityDescription insertNewObjectForEntityForName:@"Fruit" inManagedObjectContext:managedObjectContext]; 
    fruit.fruitName = @"Orange"; 
    NSSet *test = [NSSet setWithObject:fruit]; 
    [_source addSourceFruit:test]; 

NSLog(@"4"); 

fruit.fruitSource = _source; 

(_Source ist der ‚Baum‘, ich eine Anfrage für ‚Baum‘ auf der Quelleinheit in ein Array holen ausgeführt, nahm dann objectAtIndex: 0 (Baum) und zugewiesen es zu einem Punkt zu Ursprungsentität

data = [managedObjectContext executeFetchRequest:request error:&error]; 


    Source *_source = [data objectAtIndex:0]; 

und die Zugriffsmethoden:..

- (void)addSourceFruitObject:(Fruit *)value; 
- (void)removeSourceFruitObject:(Fruit *)value; 
- (void)addSourceFruit:(NSSet *)values; 
- (void)removeSourceFruit:(NSSet *)values; 

ich eine Antwort gefunden habe, um Bündel beziehen, aber ich bin nicht ganz sicher über sie I ha hab 'https://developer.apple.com/library/mac/#documentation/CoreFOundation/Conceptual/CFBundles/AboutBundles/AboutBundles.html' und 'https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdAccessorMethods.html' gelesen, aber ich finde es einfach nicht großartig.

EDIT: Der Fehler ist

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSSet intersectsSet:]: set argument is not an NSSet' 
*** First throw call stack: 

Antwort

3

Ich glaube, Sie Core Data sind verwirrend die sourceFruit Satz durch Ersetzen. Core Data behält inverse Beziehungen bei. Das bedeutet, dass Sie nur fruit.fruitSource = _source; setzen müssen, um zu verstehen, wie die Objekte verbunden werden sollen. Sie könnten [_source addSourceFruitObject:fruit];statt verwenden, aber das scheint mir weniger prägnant.

(abgesehen: es ist eine gute Idee, mit dem _name Stil der Namensgebung für lokale Variablen zu vermeiden, ist es so etwas wie ein Standard worden ist, dass die Form zum Beispiel Variablen zu verwenden, die Eigenschaften unterstützen..)

+0

Ok, also durch Entfernen der Teil mit dem NSSet (NSSet * test = [NSSet setWithObject: obst]; [_source addSourceFruit: test]; ) es wirft jetzt 'Problem speichern: Der Vorgang konnte nicht abgeschlossen werden. (Kakao Fehler 1570.) 'was bedeutet, dass etwas leer ist/Nil, aber ich bin mir nicht sicher, was. Sorry Kumpel ich weiß nicht, wie ich in so einem Web gelandet bin haha! – Craig

+0

Ihnen ein Häkchen gegeben, weil der Einsatz scheint gut zu funktionieren, nur speichern Sie es haha! – Craig

+1

Ich kann nicht sagen, was ich sehe, was das sein könnte. Anstatt '@ "4" 'zu protokollieren, könnten Sie die Werte von' _source' und 'fruit' ausdrucken, um zu sehen, ob es da einen Hinweis gibt. –