【问题标题】:Whats wrong with this array? Whenever I run the action it locks up这个数组有什么问题?每当我运行该操作时,它都会锁定
【发布时间】:2009-07-30 18:26:35
【问题描述】:

为什么这段代码不起作用?应用程序加载正常,但是每当我按下按钮时,应用程序就会锁定(不会崩溃)并将我返回到 Xcode,并且有一个红色箭头指向其中一行(如下行所示)。

我还收到三个警告(不是错误),一个说“NSMutableArray”可能无法响应“-objectAt:”,第二个说未使用变量“soundToPlay”第三个说隐式声明函数“AudioServicesPlaySystemSound”我应该关心那些?

    //In MainViewController.h

    @interface MainViewController : UIViewController {
        IBOutlet UIButton *Button;      
    }

    @property (nonatomic, retain) UIButton *Button;

    - (IBAction)playSound;

    NSInteger currentSound;
    NSMutableArray *soundArray;

    @end




    //In MainViewController.m

        - (void)viewDidLoad {
        currentSound = 0;
        NSMutableArray *sounds = [[NSMutableArray alloc] init];
        [sounds addObject: @"0.wav"];
        [sounds addObject: @"1.wav"];
        [sounds addObject: @"2.wav"];
        [sounds addObject: @"3.wav"];
        [sounds addObject: @"4.wav"];
        [sounds addObject: @"5.wav"];
        [sounds addObject: @"6.wav"];
        [sounds addObject: @"7.wav"];
        [sounds addObject: @"8.wav"];
        [sounds addObject: @"9.wav"];
        [sounds addObject: @"10.wav"];
        [sounds addObject: @"11.wav"];
        [sounds addObject: @"12.wav"];
        [sounds addObject: @"13.wav"];
        [super viewDidLoad];
    }

    - (IBAction)playSound {
        NSString *soundToPlay = [soundArray objectAt: currentSound];
//First two errors here.
        currentSound = (currentSound + 1) % [soundArray count]; //Red arrow points to this line.
        AudioServicesPlaySystemSound (currentSound);
//Third error here.
    }

【问题讨论】:

    标签: iphone objective-c arrays


    【解决方案1】:

    第一个: 方法名不存在。你的意思是写 objectAtIndex 而不是 objectAt。 当它说对象现在可能会响应“-something”时,这是因为方法未在头文件中声明。这导致编译器不确定该方法是否存在于实现文件中。当您使用内置类(NSArray、NSView 等)时,这些警告通常意味着您拼错了方法名。唯一要做的就是在文档中查找并仔细检查。当尝试向不响应选择器的对象发送消息时,此类类型错误将导致应用程序崩溃。

    第二个: 这只是一个警告,告诉您没有使用变量。删除线。如您所见,在 playSound 方法中没有使用 soundToPlay,它只是被声明了。 如果你使用它 fx.使用 NSLog 函数调用或方法,此警告应该消失。

    第三个: 您可能使用错误的功能。不能从您发布的代码中说出来..

    其他: 丹尼尔是对的。您的 viewDidLoad 方法正在创建一个本地数组,并且永远不会将其存储在 soundArray 实例变量中。为此添加一个

    soundArray = sounds
    

    在方法的底部。或者直接写到soundsArray而不是sounds。

    【讨论】:

    • 感谢您帮助消除了所有错误,除了未使用的变量错误。基本上我想做的是使用数组中生成的名称作为声音文件的名称然后播放它,我尝试了一些方法,例如 AudioServicesPlaySystemSound 函数,但没有运气。我已经检查了 Apple 文档并进行了一些 Google 搜索,但我无法找到可靠、有效的答案。
    • 问题是 AudioServicesPlaySystemSound 采用 SystemSoundID 而不是 NSString。这来自文档:要播放的系统声音。使用该函数前,调用AudioServicesCreateSystemSoundID函数获取系统声音。你读过文档吗?我对框架的这一部分没有太多经验。但是您将 NSStrings 存储在数组中,并且无法将内容直接解析为函数。这就是你现在收到错误的原因......
    【解决方案2】:

    从看到的代码来看,您似乎从未初始化 soundArray,您在 viewDidLoad 中填充了一个名为声音的局部变量,并且从未设置 soundArray...

    【讨论】:

    • 看起来像.m文件中的Matlab代码。在matlab中你不需要初始化变量。
    • 什么? soundArray 里面什么都没有,按照上面的代码是
    • @yelinna:OP 在标签中说它是 iphone 上的 objc。
    猜你喜欢
    • 2019-06-01
    • 1970-01-01
    • 2022-12-26
    • 1970-01-01
    • 2018-01-24
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多