Tôi đã nhìn thấy bài viết khác liên quan đến lỗi chọn không được công nhận, nhưng không liên quan đến mã tự động tạo ra trong phương pháp sau đây:Core Data sụp đổ - không được công nhận selector
- (void)tableView:(UITableView *)tableView commitEditingStyle:forRowAtIndexPath:
này được gọi khi tôi vuốt để xóa, và khi tôi chạm vào nút delete tôi nhận được lỗi sau:
-[Vehicle removeObjectFromGasUpsAtIndex:]: unrecognized selector sent to instance 0x8172c60
My NSManagedObject lớp, xe, có một biến NSOrderedSet tên gasUps rằng nên trả lời tin nhắn này khi tôi muốn xóa nó. Hoặc tôi nghĩ vậy.
Dưới đây là toàn bộ phương pháp, nơi nó được đâm:
- (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();
}
}
}
Tại sao chọn này không được công nhận?
CHỈNH SỬA: đây là dành cho 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
Và đây là đoạn mã nơi self.selectedVehicle được thiết lập:
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");
}
Về cơ bản, bạn không cung cấp thông tin hữu ích. Chỉ là một lỗi và một dòng mã. Về cơ bản không có bối cảnh khác. Chúng tôi không phải là độc giả quan tâm. Tất cả những gì chúng tôi có thể nói với bạn là giống như thời gian chạy: đối tượng của bạn không nhận ra bộ chọn 'removeObjectFromGasUpsAtIndex'. Bây giờ, nếu bạn muốn hiển thị mã định nghĩa kiểu 'Vehicle', và cách bạn thiết lập' self.selectedVehicle' và thậm chí có thể là bản ghi của đối tượng ngay trước khi gửi tin nhắn ... thì có lẽ bạn có thể nhận được một số Cứu giúp. –
bản sao có thể có của [Ngoại lệ được ném trong các trình truy cập được tạo bởi NSOrderedSet] (http://stackoverflow.com/questions/7385439/exception-thrown-in-nsorderedset-generated-accessors) – jrturton