2016-04-07 10 views
0

私はiOS SDKをバインドしています。どのようにバインドするObjective-Cライブラリとプロトコルとインターフェイスは同じ名前です

[Protocol(Name = "ALBBQuPaiService"), Model] 
interface ALBBQuPaiServiceProtocol 
{ 
    ... 
} 

[BaseType (typeof(NSObject), Name = "ALBBQuPaiService")] 
interface ALBBQuPaiService : ALBBQuPaiServiceProtocol 
{ 
    // +(instancetype)sharedService; 
    [Static] 
    [Export ("sharedService")] 
    ALBBQuPaiService SharedService(); 

    // @property (nonatomic, weak) id<QupaiSDKDelegate> _Nullable delegte; 
    [NullAllowed, Export ("delegte", ArgumentSemantic.Weak)] 
    QupaiSDKDelegate Delegte { get; set; } 
} 

最後に、私はランタイム時例外を得た。しかし、この

@interface ALBBQuPaiService : NSObject<ALBBQuPaiService>

について混乱Sharpieは最後ALBBQuPaiServiceは、私はこのようなApiDefinitionコードを変更しようとしました@protocol ALBBQuPaiService

です:インスタンスに送信された認識できないセレクタ0x7c73f740

どのような体は私を助けることができますか?前もって感謝します。

マイSDK link

------------------- アップデート1:ヘッダファイルのコードを追加します ----------- --------------

#import <Foundation/Foundation.h> 

typedef NS_ENUM(NSInteger,QupaiSDKWatermarkPosition){ 
    QupaiSDKWatermarkPositionTopRight, 
    QupaiSDKWatermarkPositionBottomRight, 
}; 

typedef NS_ENUM(NSInteger,QupaiSDKCameraPosition){ 
    QupaiSDKCameraPositionBack, 
    QupaiSDKCameraPositionFront, 
}; 

@protocol QupaiSDKDelegate; 

@protocol ALBBQuPaiService 

-(NSString *) getSdkConfigVersion:(NSString *) platformName 
        sdkVersion:(NSString *) sdkVersion; 

-(void) getSdkConfigVersion:(NSString *) platformName 
       sdkVersion:(NSString *) sdkVersion 
        success:(void (^)(NSString *rpcResult))success 
        failure:(void (^)(NSError *rpcError))failure; 

@property (nonatomic, weak) id<QupaiSDKDelegate> delegte; 

@property (nonatomic, assign) BOOL  enableBeauty;      
@property (nonatomic, assign) BOOL  enableImport;      
@property (nonatomic, assign) BOOL  enableMoreMusic;      
@property (nonatomic, assign) BOOL  enableVideoEffect;     
@property (nonatomic, assign) BOOL  enableWatermark;      
@property (nonatomic, assign) CGFloat thumbnailCompressionQuality;   
@property (nonatomic, strong) UIColor *tintColor;       
@property (nonatomic, strong) UIImage *watermarkImage;      
@property (nonatomic, assign) QupaiSDKWatermarkPosition watermarkPosition; 
@property (nonatomic, assign) QupaiSDKCameraPosition cameraPosition;  

- (UIViewController *)createRecordViewControllerWithMinDuration: (CGFloat)minDuration 
               maxDuration:(CGFloat)maxDuration 
                bitRate:(CGFloat)bitRate; 

- (UIViewController *)createRecordViewController; 


- (void)updateMoreMusic; 

@end 

@protocol QupaiSDKDelegate <NSObject> 

- (void)qupaiSDK:(id<ALBBQuPaiService>)sdk compeleteVideoPath:(NSString *)videoPath thumbnailPath:(NSString *)thumbnailPath; 

@optional 
- (NSArray *)qupaiSDKMusics:(id<ALBBQuPaiService>)sdk; 
- (void)qupaiSDKShowMoreMusicView:(id<ALBBQuPaiService>)sdk viewController:(UIViewController *)viewController; 

@end 

@interface ALBBQuPaiService : NSObject<ALBBQuPaiService> 
+(instancetype)sharedService; 
@property (nonatomic, weak) id<QupaiSDKDelegate> delegte; 
@end 

答えて

0

は別の、私はNSObjectのよう「プロトコル、モデルとセット基本型を置くことをお勧めします抽象クラスとして、すべてのOBJ-Cプロトコルの行為ということを覚えていますすべてのメソッドやプロパティが「必須」として作成されているため、抽象として指定する必要があります。

[Protocol, Model] 
[BaseType (typeof(NSObject))] 
interface myAwesomeDelegate 
{ 
    [Abstract] 
    [Export(...)] 
    void myRequiredMethod(uint param1) 

    [Export(...)] 
    void anotherMethod() 
} 

コマンドフレームワークbind -f myFramework.frameworkでバージョン3.Xを使用している.frameworkファイルをサポートする目的のsharpieツールを使用することをお勧めします。詳細はhttps://developer.xamarin.com/guides/cross-platform/macios/binding/objective-sharpie/tools/をチェックしてください。また、xamarin Githubバインディングhttps://github.com/mono/monotouch-bindingsバインディングに関する特定の質問がある場合はお知らせください

+0

ありがとうございますが、私は上記のすべてを試しました。そして私の問題は、 'sharpie'混乱した 'ALBBQuPaiService'は、プロトコルとインターフェイスです。だから私はこれを手動で変更する方法を知らない。 –

関連する問題