Ошибка ‘NSException’, вылетает после нажатия прямоугольной кнопки — Cocoa Touch

#iphone #objective-c #cocoa-touch #xcode #nsexception

#iPhone #objective-c #cocoa-touch #xcode #nsexception

Вопрос:

Я создал прямоугольную кнопку, при нажатии на которую пользователь переходит на свой iPod.

Я получаю эту ошибку, как только нажимаю кнопку при отладке. Я тщательно проверил код iPod, и, похоже, все правильно.

Вот ошибка отладчика, вызванного после создания экземпляра NSException :

 2011-04-23 18:42:11.580 iApp[1197:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSURL initFileURLWithPath:]: nil string parameter'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x01369be9 __exceptionPreprocess   185
    1   libobjc.A.dylib                     0x0115e5c2 objc_exception_throw   47
    2   CoreFoundation                      0x01322628  [NSException raise:format:arguments:]   136
    3   CoreFoundation                      0x0132259a  [NSException raise:format:]   58
    4   Foundation                          0x00065b12 -[NSURL(NSURL) initFileURLWithPath:]   90
    5   iApp                             0x000056f3 -[MainViewController setupApplicationAudio]   148
    6   iApp                             0x00005af0 -[MainViewController viewDidLoad]   78
    7   UIKit                               0x0037765e -[UIViewController view]   179
    8   UIKit                               0x00379012 -[UIViewController viewControllerForRotation]   63
    9   UIKit                               0x00374f76 -[UIViewController _visibleView]   90
    10  UIKit                               0x0060ea97 -[UIClientRotationContext initWithClient:toOrientation:duration:andWindow:]   354
    11  UIKit                               0x002f0ba8 -[UIWindow _setRotatableClient:toOrientation:updateStatusBar:duration:force:]   954
    12  UIKit                               0x00570948 -[UIWindowController transition:fromViewController:toViewController:target:didEndSelector:]   1053
    13  UIKit                               0x0037b982 -[UIViewController presentModalViewController:withTransition:]   3151
    14  iApp                           0x00002330 -[MainerViewController goImport:]   153
    15  UIKit                               0x002c9a6e -[UIApplication sendAction:to:from:forEvent:]   119
    16  UIKit                               0x003581b5 -[UIControl sendAction:to:forEvent:]   67
    17  UIKit                               0x0035a647 -[UIControl(Internal) _sendActionsForEvents:withEvent:]   527
    18  UIKit                               0x003591f4 -[UIControl touchesEnded:withEvent:]   458
    19  UIKit                               0x002ee0d1 -[UIWindow _sendTouchesForEvent:]   567
    20  UIKit                               0x002cf37a -[UIApplication sendEvent:]   447
    21  UIKit                               0x002d4732 _UIApplicationHandleEvent   7576
    22  GraphicsServices                    0x01b80a36 PurpleEventCallback   1550
    23  CoreFoundation                      0x0134b064 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__   52
    24  CoreFoundation                      0x012ab6f7 __CFRunLoopDoSource1   215
    25  CoreFoundation                      0x012a8983 __CFRunLoopRun   979
    26  CoreFoundation                      0x012a8240 CFRunLoopRunSpecific   208
    27  CoreFoundation                      0x012a8161 CFRunLoopRunInMode   97
    28  GraphicsServices                    0x01b7f268 GSEventRunModal   217
    29  GraphicsServices                    0x01b7f32d GSEventRun   115
    30  UIKit                               0x002d842e UIApplicationMain   1160
    31  iApp                            0x00001b34 main   102
    32  iApp                             0x00001ac5 start   53
    33  ???                                 0x00000001 0x0   1
)
terminate
  

Комментарии:

1. не могли бы вы поместить свой код, подверженный сбоям?

2. В этом случае публикация кода, вызывающего ошибку, и просто исключения без полной трассировки, вероятно, была бы более полезной. В сообщении об ошибке говорится, что вы передаете nil аргумент -[NSURL initFileURLWithPath:] ; вы изучали это?

3. Хорошо, это единственный экземпляр initfilewithurlwithpath … NSURL *newURL = [[NSURL alloc] initFileURLWithPath: soundFilePath]; self.soundFileURL = newURL; [Выпуск newURL];

4. Ура, исправлено.. Я не включил звуковой файл, глупый я!

5. Так, soundFilePath по-видимому nil , происходит по крайней мере некоторое время. Выясните, когда и почему, и вы решили свою проблему.

Ответ №1:

Если вы посмотрите на самую первую строку вашего отчета о сбое, в нем говорится, что вы передаете нулевую строку в метод NSURL initFileURLWithPath от NSURL:

 'NSInvalidArgumentException', reason: '*** -[NSURL initFileURLWithPath:]: nil string parameter'
  

Из документации Apple.

Передача nil для этого параметра приводит к исключению.

Поэтому обязательно проверьте свою NSString перед отправкой в метод initFileURLWithPath,

 NSURL* targetFileURL = nil ;
if(targetFilePath != nil)
{
       targetFileURL = [[NSURL alloc] initFileURLWithPath:targetFilePath];
}
  

Комментарии:

1. Вы не хотите повторно объявлять targetFileURL ; оставьте NSURL * в строке 4.

2. Спасибо, все, что было, это то, что я забыл добавить sound.caf в проект — только добавил его в папку.