2015-11-14 2 views
0

Я не использовал интерфейс Builder, чтобы добавить этот TableViewController в новый iOS-разработчик, поэтому, возможно, пропустил очень простую точку. Когда я нажимаю кнопку cancel_Clicked, это отклоняет представление должным образом без ошибок, но когда я нажимаю кнопку save_Clicked, я получаю следующую ошибку.Кнопка «Сохранить». Нажмите «« Непризнанный селектор, отправленный экземпляру »

Я искал всюду по SO и не нашел простого объяснения того, что может вызвать эту ошибку и еще не разрешило ее. Любое направление было бы высоко оценено.

#import "SettingsViewController.h" 
#import "Category.h" 
#import "Subject.h" 
#import "QuotesAppDelegate.h" 

@implementation SettingsViewController 

@synthesize subjects, categories, selectedSubject, selectedCategory, selectedTabs; 

static NSString *kCellIdentifier = @"MyIdentifier"; 

... 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] 
               initWithBarButtonSystemItem:UIBarButtonSystemItemCancel 
               target:self action:@selector(cancel_Clicked:)]; 

    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] 
               initWithBarButtonSystemItem:UIBarButtonSystemItemSave 
               target:self action:@selector(save_Clicked:)]; 

... 

- (void) cancel_Clicked:(id)sender { 

    //Dismiss the controller. 
    [self.navigationController dismissViewControllerAnimated:YES completion: nil]; 

} 

- (void) save_Clicked:(id)sender { 

    for (Subject *s in selectedTabs){ 
     //NSLog(@"Set selected subject %@ to %ld", s.title, (long)s.active); 

     //UPDATE THE ACTIVE STATUS ON THE SELECTED SUBJECTS 
     [s setActiveStatus:s.active]; 

     //UPDATE ARRAY 
     for (Subject *sub in self.subjects){ 

      if (sub.subject_id == s.subject_id){ 
       [sub setActive:s.active]; 
      } 

     } 

    } 

    //RELOAD WHOLE DATABASE 
    QuotesAppDelegate *appDelegate = (QuotesAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    [appDelegate populateFromDatabase]; 

    self.categories = [appDelegate activeCategories]; 
    self.subjects = [appDelegate activeSubjects]; 

    [self.tableView reloadData]; 
    [self.navigationController dismissViewControllerAnimated:YES completion: nil]; 

} 

Вот трассировки стека:

2015-11-13 17:19:09.763 Quotes[44015:2536500] -[NSIndexPath active]: unrecognized selector sent to instance 0xc000000000000016 
2015-11-13 17:19:09.841 Quotes[44015:2536500] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSIndexPath active]: unrecognized selector sent to instance 0xc000000000000016' 
*** First throw call stack: 
(
    0 CoreFoundation      0x000000010843ef45 __exceptionPreprocess + 165 
    1 libobjc.A.dylib      0x0000000107eb8deb objc_exception_throw + 48 
    2 CoreFoundation      0x000000010844756d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205 
    3 CoreFoundation      0x0000000108394eea ___forwarding___ + 970 
    4 CoreFoundation      0x0000000108394a98 _CF_forwarding_prep_0 + 120 
    5 Quotes        0x0000000105d364b8 -[SettingsViewController save_Clicked:] + 376 
    6 UIKit        0x000000010678ae91 -[UIApplication sendAction:to:from:forEvent:] + 92 
    7 UIKit        0x0000000106b87393 -[UIBarButtonItem(UIInternal) _sendAction:withEvent:] + 152 
    8 UIKit        0x000000010678ae91 -[UIApplication sendAction:to:from:forEvent:] + 92 
    9 UIKit        0x00000001068f64d8 -[UIControl sendAction:to:forEvent:] + 67 
    10 UIKit        0x00000001068f67a4 -[UIControl _sendActionsForEvents:withEvent:] + 311 
    11 UIKit        0x00000001068f691f -[UIControl _sendActionsForEvents:withEvent:] + 690 
    12 UIKit        0x00000001068f58d4 -[UIControl touchesEnded:withEvent:] + 601 
    13 UIKit        0x00000001067f8ed1 -[UIWindow _sendTouchesForEvent:] + 835 
    14 UIKit        0x00000001067f9c06 -[UIWindow sendEvent:] + 865 
    15 UIKit        0x00000001067a92fa -[UIApplication sendEvent:] + 263 
    16 UIKit        0x0000000106783abf _UIApplicationHandleEventQueue + 6844 
    17 CoreFoundation      0x000000010836b011 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17 
    18 CoreFoundation      0x0000000108360f3c __CFRunLoopDoSources0 + 556 
    19 CoreFoundation      0x00000001083603f3 __CFRunLoopRun + 867 
    20 CoreFoundation      0x000000010835fe08 CFRunLoopRunSpecific + 488 
    21 GraphicsServices     0x000000010a013ad2 GSEventRunModal + 161 
    22 UIKit        0x000000010678930d UIApplicationMain + 171 
    23 Quotes        0x0000000105cfbd9f main + 111 
    24 libdyld.dylib      0x00000001088ea92d start + 1 
    25 ???         0x0000000000000001 0x0 + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 
+0

FYI - в будущем убедитесь, что вы сначала символизируете любой зарегистрированный журнал сбоев и указываете точную строку кода, вызывающую проблему. – rmaddy

+0

Я не уверен, понимаю ли вы, что вы имеете в виду. Как вы символизируете журнал сбоев? – jroyce

+0

Сделайте поиск. Вы найдете много информации. – rmaddy

ответ

1

Я считаю, что ваша проблема с этой линии:

NSLog(@"Set selected subject %@ to %ld", s.title, (long)s.active); 

Вы пытаетесь вызвать title на NSIndexPath. Я предполагаю, что s на самом деле объект NSIndexPath, а не объект Subject.

+0

Спасибо за быстрый ответ. Я прокомментировал эту строку и обновил трассировку стека выше. По-прежнему такая же ошибка. Но это хороший совет, и я слежу за этим, чтобы понять, смогу ли я его решить. – jroyce

+2

Вам нужно посмотреть на свой массив 'selectedTabs'. Вы предполагаете, что массив содержит объекты 'Subject', но они не являются объектами Subject, они являются объектами NSIndexPath. Как вы заполняете массив? – JoGoFo

+0

Я нашел ошибку - это было из более ранней настройки, где selectedTabs не был субъектом, но был неправильно установлен здесь как indexPath [selectedTabs addObject: indexPath]; Спасибо, что привели меня к этому решению. – jroyce

Смежные вопросы