2014-01-13 56 views
5

我正在開發一款應用程序,該應用程序應檢測某種聲音的頻率。我基於我的應用程序Pitch Detector。我導入了Pitch Detector示例中的文件,然後我修復了我的代碼以接受這個新類。我在這裏發佈我的代碼解釋你我的問題:使用iPhone檢測頻率值

ViewController.h

#import <UIKit/UIKit.h> 

@class RIOInterface; 

@interface ViewController : UIViewController { 
    BOOL isListening; 
    float currentFrequency; 
    RIOInterface *rioRef; // HERE I'M GETTING ISSUE 
} 
- (IBAction)startListenWatermark:(UIButton *)sender; 

@property(nonatomic, assign) RIOInterface *rioRef; 
@property(nonatomic, assign) float currentFrequency; 
@property(assign) BOOL isListening; 

#pragma mark Listener Controls 
- (void)startListener; 
- (void)stopListener; 

- (void)frequencyChangedWithValue:(float)newFrequency; 

@end 

ViewController.m

@synthesize isListening; 
@synthesize rioRef; 
@synthesize currentFrequency; 

- (IBAction)startListenWatermark:(UIButton *)sender { 
    if (isListening) { 
     [self stopListener]; 
    } else { 
     [self startListener]; 
    } 
    isListening = !isListening; 
} 

- (void)startListener { 
    [rioRef startListening:self]; 
} 

- (void)stopListener { 
    [rioRef stopListening]; 
} 

- (void)frequencyChangedWithValue:(float)newFrequency { 
    NSLog(@"FREQUENCY: %f", newFrequency); 
} 

在代碼中,你能看到我的問題和Xcode的說:Existing instance variable 'rioRef' with assign attribute must be __unsafe_unretained。如果我刪除發生此錯誤的行,則應用程序不調用方法[rioRef startListening:self];[rioRef stopListening];

在文件RIOInterface.mm我得到另一個錯誤線97和Xcode的建議我把它從改變:

RIOInterface* THIS = (RIOInterface *)inRefCon; --> RIOInterface* THIS = (RIOInterface *)CFBridgingRelease(inRefCon); 

將它給了我這個其他錯誤就行283:

callbackStruct.inputProcRefCon = self; 

它說我:Assigning to 'void' from incompatible type 'RIOInterface *const__strong',所以我看着網頁,我發現這個解決方案:

callbackStruct.inputProcRefCon = (__bridge void*)self; 

我不確定是否適合這樣做,我希望你能幫助我解決這個問題,謝謝你的建議。

+0

什麼'callbackStruct.inputProcRefCon'聲明:對於第一個問題,我寫這段代碼解決了嗎?如果這是一個C回調機制,那麼你不會傳遞它一個Objective-C對象,你會。 – trojanfoe

+0

我想是這樣,我也沒寫的這部分代碼,它是在圖書館'RIOInterface' – lucgian841

+0

嘗試刪除行:RIOInterface * rioRef;還有@synthesize rioRef; – Greg

回答

3

對於第二和我通過禁用ARC對於其中有我上面提供的代碼的文件解決的第三問題。

rioRef = [RIOInterface sharedInstance];

+0

你找到一個方法來解決第二和第三問題沒有禁用ARC? – webdev