这应该是一个简单的问题,但我似乎无法弄明白。
我正在尝试创建自己的类,它将使用Apple提供的AudioToolbox框架提供一种更简单的播放短音的方法。当我将这些文件导入我的项目并尝试使用它们时,它们似乎无法正常工作。我希望有人能说明我在这里做错了什么。
simplesound.h
#import <Foundation/Foundation.h>
@interface simplesound : NSObject {
IBOutlet UILabel *statusLabel;
}
@property(nonatomic, retain) UILabel *statusLabel;
- (void)playSimple:(NSString *)url;
@end
simplesound.m
#import "simplesound.h"
@implementation simplesound
@synthesize statusLabel;
- (void)playSimple:(NSString *)url {
if (url = @"vibrate") {
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
statusLabel.text = @"VIBRATED!";
} else {
NSString *paths = [[NSBundle mainBundle] resourcePath];
NSString *audioF1ile = [paths stringByAppendingPathComponent:url];
NSURL *audioURL = [NSURL fileURLWithPath:audioFile isDirectory:NO];
SystemSoundID mySSID;
OSStatus error = AudioServicesCreateSystemSoundID ((CFURLRef)audioURL,&mySSID);
AudioServicesAddSystemSoundCompletion(mySSID,NULL,NULL,simpleSoundDone,NULL);
if (error) {
statusLabel.text = [NSString stringWithFormat:@"Error: %d",error];
} else {
AudioServicesPlaySystemSound(mySSID);
}
}
static void simpleSoundDone (SystemSoundID mySSID, void *args) {
AudioServicesDisposeSystemSoundID (mySSID);
}
}
- (void)dealloc {
[url release];
}
@end
有谁看到我在这里想要完成的事情?有谁知道如何补救所谓错误的代码?
答案 0 :(得分:2)
在基于C语言中,=
是赋值运算符,==
是相等运算符。
所以当你这样写:
if (url = @"vibrate") {
这将始终返回true,因为在C(因此Obj-C)中,如果括号中的内容不为0,则if
语句为“true”,并且=
操作返回已分配的value,在这种情况下是一个指向NSString @“vibrate”的指针(绝对不是零)。
我不知道您为什么要将URL字符串与@“vibrate”进行比较,但是比较NSString对象的正确方法是执行以下操作:
if ([url isEqualToString:@"vibrate"])
答案 1 :(得分:1)
if (url = @"vibrate") {
另见Tell The Program What To Do When No Save Data Is Found NSUserDefaults, iPhone。