我正在開發一款應用程序,該應用程序應檢測某種聲音的頻率。我基於我的應用程序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;
我不確定是否適合這樣做,我希望你能幫助我解決這個問題,謝謝你的建議。
什麼'callbackStruct.inputProcRefCon'聲明:對於第一個問題,我寫這段代碼解決了嗎?如果這是一個C回調機制,那麼你不會傳遞它一個Objective-C對象,你會。 – trojanfoe
我想是這樣,我也沒寫的這部分代碼,它是在圖書館'RIOInterface' – lucgian841
嘗試刪除行:RIOInterface * rioRef;還有@synthesize rioRef; – Greg