2012-09-12 15 views
5

Widziałem inne posty dotyczące nierozpoznanych błędów selektora, ale nic co do auto-wygenerowany kod w następującej metody:Rdzeń danych crash - nierozpoznany selektor

- (void)tableView:(UITableView *)tableView commitEditingStyle:forRowAtIndexPath: 

Nazywa się to kiedy swipe usunąć, a kiedy dotknij przycisk kasowania pojawia się następujący błąd:

-[Vehicle removeObjectFromGasUpsAtIndex:]: unrecognized selector sent to instance 0x8172c60

klasa My NSManagedObject, pojazd, ma zmienny NSOrderedSet nazwanych gasUps który powinien odpowiedzieć na tę wiadomość, gdy chcę, aby go usunąć. Tak przynajmniej myślałem.

Oto cała metoda gdzie jest upaść:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
    // need to delete gas up and not vehicle 
    int row = [indexPath row]; 

    //[self.selectedVehicle removeObjectFromGasUpsAtIndex:row]; 
    [self.selectedVehicle removeObjectFromGasUpsAtIndex:row]; 
    NSError *error = nil; 
    if (![self.managedObjectContext save:&error]) { 
     // Replace this implementation with code to handle the error appropriately. 
     // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 
    } 
} 
} 

Dlaczego to selektor nierozpoznany?

EDYCJA: jest to dla Jody.

#import <Foundation/Foundation.h> 
#import <CoreData/CoreData.h> 

typedef enum { 
    FullExtract, 
    NameExtract 
} kTitleExtract; 

@interface Vehicle : NSManagedObject 

@property (nonatomic, retain) NSString * name; 
@property (nonatomic, retain) NSNumber * year; 
@property (nonatomic, retain) NSString * make; 
@property (nonatomic, retain) NSNumber * mileage; 
@property (nonatomic, retain) NSString * model; 
@property (nonatomic, retain) NSOrderedSet *gasUps; 

// added methods 
- (NSString *)getTitleExtract:(kTitleExtract)titleExtract; 

@end 

@interface Vehicle (CoreDataGeneratedAccessors) 

- (void)insertObject:(NSManagedObject *)value inGasUpsAtIndex:(NSUInteger)idx; 
- (void)removeObjectFromGasUpsAtIndex:(NSUInteger)idx; 
- (void)insertGasUps:(NSArray *)value atIndexes:(NSIndexSet *)indexes; 
- (void)removeGasUpsAtIndexes:(NSIndexSet *)indexes; 
- (void)replaceObjectInGasUpsAtIndex:(NSUInteger)idx withObject:(NSManagedObject *)value; 
- (void)replaceGasUpsAtIndexes:(NSIndexSet *)indexes withGasUps:(NSArray *)values; 
- (void)addGasUpsObject:(NSManagedObject *)value; 
- (void)removeGasUpsObject:(NSManagedObject *)value; 
- (void)addGasUps:(NSOrderedSet *)values; 
- (void)removeGasUps:(NSOrderedSet *)values; 

@end 

A oto fragment kodu gdzie self.selectedVehicle jest ustawiona:

if (self.vehiclesArray != nil && [self.vehiclesArray count] != 0 && self.vehicleIndex != -1) { 
    // enable add buttom 
    [self.navigationItem.rightBarButtonItem setEnabled:YES]; 
    self.selectedVehicle = [self.vehiclesArray objectAtIndex:self.vehicleIndex]; 
    NSLog(@"set selected vehicle"); 
} else { 
    // disable add button 
    [self.navigationItem.rightBarButtonItem setEnabled:NO]; 

    // set vehicle defaults to -1 and make disable add buttom 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setInteger:-1 forKey:@"vehicleIndex"]; 
    [defaults synchronize]; 
    NSLog(@"set index to -1"); 
} 
+0

W zasadzie pod warunkiem brak przydatnych informacji. Tylko błąd i linia kodu. Zasadniczo nie ma innego kontekstu. Nie jesteśmy czytelnikami umysłu. Wszystko, co możemy powiedzieć, jest takie samo jak środowisko wykonawcze: twój obiekt nie rozpoznaje selektora 'removeObjectFromGasUpsAtIndex'. Teraz, jeśli chcesz pokazać kod, który definiuje typ "pojazdu" i jak ustawiasz 'self.selectedVehicle', a może nawet dziennik obiektu tuż przed wysłaniem wiadomości ... może mógłbyś dostać trochę Wsparcie. –

+0

możliwy duplikat [wyjątku zgłoszonego w akcesoriach generowanych przez NSOrderedSet] (http://stackoverflow.com/questions/7385439/exception-thrown-in-nsorderedset-generated-accessors) – jrturton

Odpowiedz

5

Jest to prawdopodobnie związane znanego błędu w auto Rdzeń danych generowanych akcesorów dla zamówionej jeden-do-wielu relacje.

rdar://10114310

Do tego jest skierowana trzeba dostarczyć własnej implementacji dla brakujących dostępowych.

Zobacz odpowiedzi na this question

Powiązane problemy