2013-07-11 52 views
1

我仍在使用名为Cruzia的iPhone应用程序,现在想知道为什么我在ViewController.m和三个错误中都出现这两个警告,都是Apple Mach-O链接器错误。如果你能指点我一些修复的方向,我会非常感激。我在viewcontroller.m的副本评论警告如下:函数'...'的隐式声明在C99上无效

#import "CIAViewController.h" 

@interface CIAViewController() 


@end 

@implementation CIAViewController 




-(IBAction)press { 
    cruzia.hidden = 0; 
    textarea.hidden = 0; 
    playbtn.hidden = 1; 
    tutorialbtn.hidden = 1; 
    optionsbtn.hidden = 1; 
    trainingbtn.hidden = 1; 
    back.hidden = 0; 
    cruzia.text = @"Play"; 
    textarea.text = @"Hello! You are playing the game of Cruzia!"; 

     // declare defaults it is not declared elsewhere within your view controller 
     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

     // The stringForKey method returns a String and not a Boolean value 
     // However, if you just want to check if a value exists then it is implied you are checking for existence 
     // If there is no value then it will return nil and statement will fail 
     // You had "== YES" outside of the parenthesis which is an illegal statement 
     if ([defaults stringForKey:kMusic]) { 
      CFBundleRef mainBundle = CFBundleGetMainBundle(); 
      CFURLRef soundFileURLRef; 
      soundFileURLRef =CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"click",      CFSTR ("wav"), NULL); 
      UInt32 soundID; 
      AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID); 
      AudioServicesPlaySystemSound(soundID); } 

} 


-(IBAction)press2 { 
    cruzia.hidden = 0; 
    textarea.hidden = 0; 
    playbtn.hidden = 1; 
    tutorialbtn.hidden = 1; 
    optionsbtn.hidden = 1; 
    trainingbtn.hidden = 1; 
    back.hidden = 0; 
    cruzia.text = @"Tutorial"; 
    textarea.text = @"Welcome! You are watching the Cruzia tutorial!"; 
    // declare defaults it is not declared elsewhere within your view controller 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    // The stringForKey method returns a String and not a Boolean value 
    // However, if you just want to check if a value exists then it is implied you are checking for existence 
    // If there is no value then it will return nil and statement will fail 
    // You had "== YES" outside of the parenthesis which is an illegal statement 
    if ([defaults stringForKey:kMusic]) { 
     CFBundleRef mainBundle = CFBundleGetMainBundle(); 
     CFURLRef soundFileURLRef; 
     soundFileURLRef =CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"click",      CFSTR ("WAV"), NULL); 
     UInt32 soundID; 
     AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID); 
     AudioServicesPlaySystemSound(soundID); } 
} 

-(IBAction)press3 { 
    cruzia.hidden = 0; 
    textarea.hidden = 0; 
    playbtn.hidden = 1; 
    tutorialbtn.hidden = 1; 
    optionsbtn.hidden = 1; 
    trainingbtn.hidden = 1; 
    back.hidden = 0; 
    cruzia.text = @"Options"; 
    textarea.text = @"Hello! You have clicked Options. Sadly, you need to open Settngs and go to the Cruzia area to get most of the options of the game."; 
    CFBundleRef mainBundle = CFBundleGetMainBundle(); 
    CFURLRef soundFileURLRef; 
    soundFileURLRef =CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"click", CFSTR ("WAV"), NULL); 
    UInt32 soundID; 
    AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID); 
    AudioServicesPlaySystemSound(soundID); 
} 

-(IBAction)press4 { 
    cruzia.hidden = 0; 
    textarea.hidden = 0; 
    playbtn.hidden = 1; 
    tutorialbtn.hidden = 1; 
    optionsbtn.hidden = 1; 
    trainingbtn.hidden = 1; 
    back.hidden = 0; 
    cruzia.text = @"Training"; 
    textarea.text = @"This is the training area. You can improve your Cruzia skills here!"; 
    // declare defaults it is not declared elsewhere within your view controller 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    // The stringForKey method returns a String and not a Boolean value 
    // However, if you just want to check if a value exists then it is implied you are checking for existence 
    // If there is no value then it will return nil and statement will fail 
    // You had "== YES" outside of the parenthesis which is an illegal statement 
    if ([defaults stringForKey:kMusic]) { 
     CFBundleRef mainBundle = CFBundleGetMainBundle(); 
     CFURLRef soundFileURLRef; 
     soundFileURLRef =CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"click",      CFSTR ("WAV"), NULL); 
     UInt32 soundID; 
     AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID); 
     AudioServicesPlaySystemSound(soundID); } 
} 

-(IBAction)press5 { 
    cruzia.hidden = 0; 
    textarea.hidden = 0; 
    playbtn.hidden = 0; 
    tutorialbtn.hidden = 0; 
    optionsbtn.hidden = 0; 
    trainingbtn.hidden = 0; 
    back.hidden = 1; 
    cruzia.text = @"Cruzia"; 
    textarea.text = @""; 
    // declare defaults it is not declared elsewhere within your view controller 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    // The stringForKey method returns a String and not a Boolean value 
    // However, if you just want to check if a value exists then it is implied you are checking for existence 
    // If there is no value then it will return nil and statement will fail 
    // You had "== YES" outside of the parenthesis which is an illegal statement 
    if ([defaults stringForKey:kMusic]) { 
     CFBundleRef mainBundle = CFBundleGetMainBundle(); 
     CFURLRef soundFileURLRef; 
     soundFileURLRef =CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"click",      CFSTR ("WAV"), NULL); 
     UInt32 soundID; 
     AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID); 
     AudioServicesPlaySystemSound(soundID); } 

} 

- (void)viewDidLoad 
{ 
    textarea.hidden = 1; 
    playbtn.hidden = 0; 
    tutorialbtn.hidden = 0; 
    optionsbtn.hidden = 0; 
    trainingbtn.hidden = 0; 
    back.hidden = 1; 
    cruzia.text = @"Cruzia"; 
    [super viewDidLoad]; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateSettings:) 
               name: 
    NSUserDefaultsDidChangeNotification object:nil]; 

    [self setupDefaults]; 
} 

- (void)viewDidUnload 
{ 

    [super viewDidUnload]; 

    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidFinishLaunchingNotification object:nil]; 
} 

-(void) setupDefaults { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 


    NSString *violenceValue = [defaults stringForKey:kViolenceMode]; 

    if (violenceValue == nil) { 
     NSString *pathStr = [[NSBundle mainBundle] bundlePath]; 
     NSString *settingsBundlePath = [pathStr stringByAppendingPathComponent:@"Settings.bundle"]; 
     NSString *finalPath = [settingsBundlePath stringByAppendingPathComponent:@"Root.plist"]; 

     NSDictionary *settingsDictionary = [NSDictionary dictionaryWithContentsOfFile:finalPath]; 
     NSArray *prefSpecifierArray = [settingsDictionary objectForKey:@"PreferenceSpecifiers"]; 


     NSString *isMusicOn, *isSoundOn; 

     NSDictionary *prefItem; 

     for (prefItem in prefSpecifierArray) { 
      NSString *keyValue = [prefItem objectForKey:@"Key"]; 
      id defaultValue = [prefItem objectForKey:@"DeafultValue"]; 

      if ([keyValue isEqualToString:kSound]) 
      { 
       isSoundOn = defaultValue; 
      } 
      else if ([keyValue isEqualToString:kMusic]) 
      { 
       isMusicOn = defaultValue; 
      } 

      NSDictionary *appDefaults = [NSDictionary dictionaryWithObjectsAndKeys:         isSoundOn, kSound, isMusicOn, kMusic, nil]; 

      [defaults registerDefaults:appDefaults]; 
      [defaults synchronize]; 

     } 

    } 

} 



@end 

这里是我收到其他错误与调试和输出板开放的地方的屏幕截图的链接。再次

enter image description here

感谢, - 乔治

回答

5

由于生成日志说,这两个符号缺失:

AudioServicesCreateSystemSoundIDAudioServicesPlaySystemSound

简单的解决办法是,它看起来像您需要将“AudioToolbox”框架添加到您的项目中。

+0

哦,我是多么愚蠢!谢谢! – George523

+2

这并不愚蠢,也不难过。有时你只需要另一双眼睛来看问题,这一切都变得清晰起来。 –

+0

我已经添加了它,但仍然无法构建。在另一个项目中,这是一个警告,可以构建好,但在一个新项目中,这是一个错误。 – Gank

相关问题