Акселерометр — сбой после встряхивания — Cocoa Touch

#iphone #objective-c #xcode #accelerometer

#iPhone #objective-c #xcode #акселерометр

Вопрос:

Здравствуйте, я пытаюсь это сделать, поэтому, как только пользователь встряхивает устройство. Я хочу, чтобы воспроизводился звук. Однако, как только я встряхиваю устройство, оно выходит из строя, это код, который я использовал

 - (BOOL)canBecomeFirstResponder
{
    return YES;
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    [self becomeFirstResponder];
}

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    if(motion == UIEventSubtypeMotionShake)
    {
        NSString *path = [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"wav"];
        if (theAudio) [theAudio release];
        NSError *error = nil;
        theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:amp;error];
        if (error)
            NSLog(@"%@",[error localizedDescription]);
        theAudio.delegate = self;
        [theAudio play];    
    }
}
  

И это отчет о сбое

 2011-04-19 19:25:44.337 iApp[314:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSURL initFileURLWithPath:]: nil string parameter'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x00fc3be9 __exceptionPreprocess   185
    1   libobjc.A.dylib                     0x00db85c2 objc_exception_throw   47
    2   CoreFoundation                      0x00f7c628  [NSException raise:format:arguments:]   136
    3   CoreFoundation                      0x00f7c59a  [NSException raise:format:]   58
    4   Foundation                          0x00055b12 -[NSURL(NSURL) initFileURLWithPath:]   90
    5   Foundation                          0x00055aa0  [NSURL(NSURL) fileURLWithPath:]   72
    6   iApp                               0x0000305d -[AppViewController motionEnded:withEvent:]   256
    7   UIKit                               0x002dc07c -[UIWindow sendEvent:]   350
    8   UIKit                               0x002bf37a -[UIApplication sendEvent:]   447
    9   UIKit                               0x002c311b _UIApplicationHandleEvent   1921
    10  GraphicsServices                    0x017daa36 PurpleEventCallback   1550
    11  CoreFoundation                      0x00fa5064 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__   52
    12  CoreFoundation                      0x00f056f7 __CFRunLoopDoSource1   215
    13  CoreFoundation                      0x00f02983 __CFRunLoopRun   979
    14  CoreFoundation                      0x00f02240 CFRunLoopRunSpecific   208
    15  CoreFoundation                      0x00f02161 CFRunLoopRunInMode   97
    16  GraphicsServices                    0x017d9268 GSEventRunModal   217
    17  GraphicsServices                    0x017d932d GSEventRun   115
    18  UIKit                               0x002c842e UIApplicationMain   1160
    19  iApp                               0x0000295c main   102
    20  iApp                               0x000028ed start   53
)
terminate called after throwing an instance of 'NSException'
  

Ответ №1:

Учитывая причину сообщения о сбое:

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

вместе с последней выполненной строкой в коде вашего приложения:

    6   iApp               0x0000305d -[AppViewController motionEnded:withEvent:]   256
  

Я бы подумал, что ваш звук.wav-файл отсутствует:

     NSString *path = [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"wav"];
  

Я предлагаю вам убедиться:

  1. звук.файл wav находится в вашем проекте
  2. пишется ли «sound.wav» с учетом регистра

Надеюсь, это поможет.

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

1. Был там сам. Рад помочь.

2. @LAA, вы должны проголосовать и принять ответ, поскольку он правильный.