2017-07-20 3 views
0

Ich versuche, Daten in eine Entität einzufügen, die eine Beziehung von eins zu viele verwendet. Der Name meiner Entität lautet Student und Detail. Student bis Detail haben mehrere Beziehung und Detail bis student eine Beziehung. Beziehungsname ist detailRelationship von Student bis Detail & studentRelationship von Detail bis Student.Grund: '- [Detail addDetailRelationship:]: unerkannter Selektor an Instanz 0x6000000ad740 gesendet

StudentCoreDataclassProperties

#import "Student+CoreDataClass.h" 


NS_ASSUME_NONNULL_BEGIN 

@interface Student (CoreDataProperties) 

+ (NSFetchRequest<Student *> *)fetchRequest; 

@property (nullable, nonatomic, copy) NSString *number; 
@property (nullable, nonatomic, retain) NSSet<Detail *> *detailRelationship; 

@end 

@interface Student (CoreDataGeneratedAccessors) 

- (void)addStudentRelationshipObject:(Detail *)value; 
- (void)removeStudentRelationshipObject:(Detail *)value; 
- (void)addStudentRelationship:(NSSet<Detail *> *)values; 
- (void)removeStudentRelationship:(NSSet<Detail *> *)values; 

@end 

DetailCoreDataclassProperties

#import "Detail+CoreDataClass.h" 


NS_ASSUME_NONNULL_BEGIN 

@interface Detail (CoreDataProperties) 

+ (NSFetchRequest<Detail *> *)fetchRequest; 

@property (nullable, nonatomic, copy) NSString *name; 
@property (nullable, nonatomic, copy) NSString *address; 
@property (nullable, nonatomic, retain) Student *studentRelationship; 
//@property (nullable, nonatomic, retain) NSSet<Detail *> *studentRelationship; 

@end 

@interface Detail (CoreDataGeneratedAccessors) 

- (void)addDetailRelationshipObject:(Detail *)value; 
- (void)removeDetailRelationshipObject:(Detail *)value; 
- (void)addDetailRelationship:(NSSet<Detail *> *)values; 
- (void)removeDetailRelationship:(NSSet<Detail *> *)values; 

@end 

Code für Insert Daten

- (IBAction)submit:(id)sender { 
    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
    _mainContext = [appDelegate manageObjectContext]; 

    Detail *detailtEntity = (Detail *)[NSEntityDescription insertNewObjectForEntityForName:@"Detail" inManagedObjectContext:_mainContext]; 
    _studentClass = (Student *)[NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:_mainContext]; 

    detailtEntity.name = _nameText.text; 
    detailtEntity.address = _addressText.text; 
    detailtEntity.address = _addressText1.text; 
    detailtEntity.name = _nameText1.text; 
    _studentClass.number = _numberText.text; 
    NSMutableSet *mySet = [[NSMutableSet alloc] init]; 
    [mySet addObject: _studentClass]; 
    [detailtEntity addDetailRelationship:mySet];//crash app here 
    detailtEntity.studentRelationship = _studentClass; 

    NSError *error = nil; 
    [_mainContext save:&error]; 

    if (![_mainContext save:&error]) { 
     NSLog(@"error in adding data %@, %@", error, [error userInfo]); 
     abort(); 
    } 

    [self.navigationController popToRootViewControllerAnimated:YES]; 

} 

Zeigen Sie mir Fehler wie folgt aus: 'NSInvalidArgumentException', Grund: '- [Detail addDetailRelationship:]: Unbekannter Selektor gesendet Instanz 0x6000000ad740'

Antwort

0

Sie existiert eine Nachricht mit Unterschrift

- (void)addDetailRelationship:(NSSet<Student *> *)values, 

aber keine Methode, mit dieser Signatur zu senden. Statt Ihre Unterschrift ist

- (void)addDetailRelationship:(NSSet<Detail *> *)values 

(die Änderung von Detail * zu Student * bemerken. So Ihre Anwendung mit einem nicht erkannten Selektor Ausnahme abstürzt. Ich weiß nicht, was die Logik der Sie das Programm ist, aber Sie müssen entweder Erstellen Sie eine Methode mit dieser Signatur oder geben Sie Parameter mit dem richtigen Typ ein

+0

Ich versuche, mehrere Entity zu lernen und in diesem Code versuchen, Detail Entity in zwei Datensatz und Student Entity in Link nur Nummer dieser zwei Datensätze in Detail. Jetzt verstehst du, was ich mache? Vielen Dank. –

+0

Hey nach Änderungen zeigen mir Fehler wie folgt: Grund: '- [Detail addDetailRelationship:]: nicht erkannte Selektor an Instanz 0x6080000ad7a0 gesendet' –

0

Core-Daten verwalten Beziehungsinvertierungen für Sie Wenn Sie die Schülerbeziehung des Details festlegen, werden die Stammdaten automatisch als eine der Schülerdetails festgelegt brauchen überhaupt für das, das abstürzt, also entfernen Sie einfach

[detailtEntity addDetailRelationship:mySet];//crash app here 

(Der Grund für den Absturz ist, dass SieDetailRelationship für den Schüler hinzufügen müssen - [_studentClass addDetailRelationship: mySet]. Aber wie ich oben sagte, brauchen Sie die Linie überhaupt nicht)

Verwandte Themen