帮助创建自定义iPhone类

时间:2010-04-04 20:14:04

标签: iphone objective-c iphone-sdk-3.0

这应该是一个简单的问题,但我似乎无法弄明白。

我正在尝试创建自己的类,它将使用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

有谁看到我在这里想要完成的事情?有谁知道如何补救所谓错误的代码?

2 个答案:

答案 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)