Помогите создать пользовательские классы iPhone - PullRequest
0 голосов
/ 05 апреля 2010

Это должен быть простой вопрос, но я просто не могу понять это.

Я пытаюсь создать свой собственный класс, который обеспечит более простой способ воспроизведения коротких звуков с использованием инфраструктуры AudioToolbox, предоставленной Apple. Когда я импортирую эти файлы в свой проект и пытаюсь их использовать, они просто не работают. Я надеялся, что кто-то пролил некоторый свет на то, что я могу делать здесь не так.

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 ]

2 голосов
/ 05 апреля 2010

В языках на основе C = является оператором присваивания, а == является оператором равенства.

Поэтому, когда вы пишете это:

if (url = @"vibrate") {

Это всегда будет возвращатьсяtrue, поскольку в C (и, следовательно, в Obj-C) операторы if имеют значение «true», если в скобках указано не 0, а операция = возвращает присвоенное значение, которое в данном случае является указателем наNSString @ "vibrate" (что определенно не равно нулю).

Я не знаю точно, почему вы пытаетесь сравнить строку URL с @ "vibrate", но правильный способ сравнения объектов NSString -сделать что-то вроде:

if ([url isEqualToString:@"vibrate"])
1 голос
/ 05 апреля 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...