Завершение приложения из-за необработанного исключения 'NSInvalidArgumentException - PullRequest
0 голосов
/ 23 марта 2011

Я пишу приложение для iPad и создал DatePickerView и вызываю его из UIPopoverController, как показано ниже:

    DatePickerView *dt = [[DatePickerView alloc] initWithNibName:nil bundle:nil];
    popover =   [[UIPopoverController alloc] initWithContentViewController:dt]; 
    popover.delegate = self;
    [dt release];

    self.popoverController = popover;
    [popover release];

    CGRect popoverRect = [self.view convertRect:[sender frame] fromView:[sender superview]];    
    popoverRect.size.width = MIN(popoverRect.size.width, 100);

    [self.popoverController presentPopoverFromRect:popoverRect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

В DatePickerView у меня есть код ниже, когда выбрана кнопка «Готово», это в основном отправка выбранногодата с форматером возвращается к основному интерфейсу с помощью appdelegate:

.h I

BOutlet UIDatePicker *dtPicker;

-(IBAction) btnSelectClicked:(UIButton *)sender
{

    MachineDetailsView *appDelegate;
    appDelegate = (MachineDetailsView *)[[UIApplication sharedApplication] delegate];

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"MM/dd/YYYY"];

    NSDate *dt = [dtPicker date];

    appDelegate.backPickerStartDate = [formatter stringFromDate:dt];
}

в MachineDetailsView. Я объявил backPickerStartDate, как показано ниже:

.h: сведения о файле

NSString *backPickerStartDate; 

UIPopoverController *popoverController; 

UIPopoverController *popover; 

....
@property(nonatomic, retain) NSString *backPickerStartDate;

....

.m: сведения о файле

@synthesize backPickerStartDate;

Я получаю ошибку ниже, когда нажимаю кнопку «Готово» DatePickerView

2011-03-23 11:46:59.813 iMobile[22492:40b] -[iMobileAppDelegate setBackPickerStartDate:]: unrecognized selector sent to instance 0x8a3dc00
2011-03-23 11:46:59.816 iMobile[22492:40b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[iMobileAppDelegate setBackPickerStartDate:]: unrecognized selector sent to instance 0x8a3dc00'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x00df9be9 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x00f4e5c2 objc_exception_throw + 47
    2   CoreFoundation                      0x00dfb6fb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
    3   CoreFoundation                      0x00d6b366 ___forwarding___ + 966
    4   CoreFoundation                      0x00d6af22 _CF_forwarding_prep_0 + 50
    5   UIKit                               0x00302a6e -[UIApplication sendAction:to:from:forEvent:] + 119
    6   UIKit                               0x003911b5 -[UIControl sendAction:to:forEvent:] + 67
    7   UIKit                               0x00393647 -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 527
    8   UIKit                               0x003921f4 -[UIControl touchesEnded:withEvent:] + 458
    9   UIKit                               0x003270d1 -[UIWindow _sendTouchesForEvent:] + 567
    10  UIKit                               0x0030837a -[UIApplication sendEvent:] + 447
    11  UIKit                               0x0030d732 _UIApplicationHandleEvent + 7576
    12  GraphicsServices                    0x0172fa36 PurpleEventCallback + 1550
    13  CoreFoundation                      0x00ddb064 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
    14  CoreFoundation                      0x00d3b6f7 __CFRunLoopDoSource1 + 215
    15  CoreFoundation                      0x00d38983 __CFRunLoopRun + 979
    16  CoreFoundation                      0x00d38240 CFRunLoopRunSpecific + 208
    17  CoreFoundation                      0x00d38161 CFRunLoopRunInMode + 97
    18  GraphicsServices                    0x0172e268 GSEventRunModal + 217
    19  GraphicsServices                    0x0172e32d GSEventRun + 115
    20  UIKit                               0x0031142e UIApplicationMain + 1160
    21  iG2Mobile                           0x000022f2 main + 84
    22  iG2Mobile                           0x00002295 start + 53
)
terminate called after throwing an instance of 'NSException'
Program received signal:  “SIGABRT”.

ЛЮБАЯ ПОМОЩЬ ЦЕННО ПРИЗНАЕТСЯ,Пожалуйста, дайте мне знать, если понадобится какая-либо дополнительная информация.

Я также добавил ниже метод установки в MachineDetailsView, но все еще не используется:

-(void)setBackPickerStartDate:(NSString *)newBackPickerStartDate
{

    if (backPickerStartDate != newBackPickerStartDate) {
        backPickerStartDate = newBackPickerStartDate;
    }
}

Большое спасибо

Ответы [ 2 ]

1 голос
/ 23 марта 2011

Вы заявили, что объявили и синтезировали свойство backPickerStartDate в классе MachineDetailsView, но вызываете его для экземпляра iMobileAppDelegate в btnSelectClicked:

appDelegate.backPickerStartDate = [formatter stringFromDate:dt];

Несколько строк выше, у вас есть это:

MachineDetailsView *appDelegate;
appDelegate = (MachineDetailsView *)[[UIApplication sharedApplication] delegate];

Это неправильно, поскольку вы приводите указатель к делегату приложения к указателю на MachineDetailsView. Это не делает ваш объект делегата приложения волшебным образом превращается в объект MachineDetailsView. Вместо этого вам нужен метод или свойство получателя, которое возвращает ваш объект MachineDetailsView (или находит другой способ доступа к нему).

0 голосов
/ 23 марта 2011
[iMobileAppDelegate setBackPickerStartDate:]: unrecognized selector sent to instance

В соответствии с приведенным выше исключением, вам нужно объявить backPickerStartDate в делегате приложения.

...