Iphone 这个阵列有什么问题?每当我运行该操作时,它都会锁定

Iphone 这个阵列有什么问题?每当我运行该操作时,它都会锁定,iphone,objective-c,arrays,Iphone,Objective C,Arrays,为什么这个代码不起作用?应用程序可以正常加载,但是只要我按下按钮,应用程序就会锁定(不会崩溃)并返回到Xcode,并且有一个红色箭头指向其中一行(在下面的行中指示) 我还收到了三条警告(不是错误),一条说“NSMutableArray”可能不响应“-objectAt:”,第二条说未使用的变量“soundToPlay”,第三条说函数的隐式声明“AudioServicesPlaySystemSound”,我应该关注这些吗 //In MainViewController.h @int

为什么这个代码不起作用?应用程序可以正常加载,但是只要我按下按钮,应用程序就会锁定(不会崩溃)并返回到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.
    }

从看到的代码来看,您似乎从未初始化soundArray,您正在viewDidLoad中填充名为sounds的局部变量,并且从未设置soundArray…

从看到的代码来看,您似乎从未初始化soundArray,您在viewDidLoad中填充名为sounds的局部变量,永远不要设置soundArray…

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

第二个: 这只是一个警告,告诉您没有使用变量。拆下管路。正如您所看到的,在playSound方法中没有使用soundToPlay,只是声明了它。 如果你使用它。使用NSLog函数调用或在方法中,此警告应消失

第三个: 您可能使用了错误的函数。无法从你发布的代码中说出

其他: 丹尼尔是对的。viewDidLoad方法正在创建一个本地数组,并且从不将其存储在soundArray instancevariable中。为此,请添加一个

soundArray = sounds

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

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

第二个: 这只是一个警告,告诉您没有使用变量。拆下管路。正如您所看到的,在playSound方法中没有使用soundToPlay,只是声明了它。 如果你使用它。使用NSLog函数调用或在方法中,此警告应消失

第三个: 您可能使用了错误的函数。无法从你发布的代码中说出

其他: 丹尼尔是对的。viewDidLoad方法正在创建一个本地数组,并且从不将其存储在soundArray instancevariable中。为此,请添加一个

soundArray = sounds

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

它看起来像.m文件中的Matlab代码。在matlab中,不需要初始化变量。什么?soundArray中没有任何内容,按照上面的代码执行is@yelinna:OP在标签中表示它是iphone上的objc。它看起来像.m文件中的Matlab代码。在matlab中,不需要初始化变量。什么?soundArray中没有任何内容,按照上面的代码执行is@yelinna:OP在标签中表示它是iphone上的objc。感谢您帮助排除了所有错误,除了未使用的变量错误。基本上,我想使用数组中生成的名称作为声音文件的名称,然后播放它,我尝试了一些方法,例如AudioServicesPlaySystemSound函数,但没有成功。我查阅了苹果的文档,并在谷歌上搜索了几次,但没有找到一个可靠的、有效的答案。问题是AudioServicesPlaySystemSound采用的是SystemSoundID,而不是NSString。这来自文档:系统声音播放。使用此函数之前,请调用AudioServicesCreateSystemSoundID函数以获取系统声音。你给医生读过书吗?我对这部分框架没有太多经验。。但是您将NSString存储在数组中,无法将内容直接解析到函数中。这就是为什么您现在会出现错误…请尝试查看以下示例代码:感谢您帮助您消除了所有错误,除了未使用的变量错误。基本上,我想使用数组中生成的名称作为声音文件的名称,然后播放它,我尝试了一些方法,例如AudioServicesPlaySystemSound函数,但没有成功。我查阅了苹果的文档,并在谷歌上搜索了几次,但没有找到一个可靠的、有效的答案。问题是AudioServicesPlaySystemSound采用的是SystemSoundID,而不是NSString。这来自文档:系统声音播放。使用此函数之前,请调用AudioServicesCreateSystemSoundID函数以获取系统声音。你给医生读过书吗?我对这部分框架没有太多经验。。但是您将NSString存储在数组中,无法将内容直接解析到函数中。这就是你现在出错的原因…试着看看这个e