2016-04-07 2 views
0

Ich bin ein iOS SDK verbindlich. Aber die Sharpie verwirrt über diesesWie Objective-C-Bibliothek mit Protokoll und Schnittstelle binden denselben Namen haben

@interface ALBBQuPaiService : NSObject<ALBBQuPaiService>

Der letzte ALBBQuPaiService ist @protocol ALBBQuPaiService

ich versucht habe ApiDefinition Code wie folgt zu ändern:

[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; } 
} 

Schließlich bekam ich Ausnahme Laufzeit Zeit : nicht erkannter Selektor an Instanz 0x7c73f740 gesendet

Jeder Körper kann mir helfen? Danke im Voraus.

Mein SDK link

------------------- Update 1: Header-Datei Code hinzufügen ----------- --------------

#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 

Antwort

0

Denken Sie daran, dass alle obj-c-Protokoll fungieren als eine abstrakte Klasse I zu setzen „-Protokoll, Modell und stellen Basistyp als NSObject empfehlen, eine andere Alle Methoden oder Eigenschaften, die als "erforderlich" erstellt wurden, müssen als Abstract angegeben werden.

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

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

Ich empfehle das Ziel Sharpie-Tool verwenden, um es .framework Dateien mit der Version 3.X mit dem Befehl Rahmen binden -f myFramework.framework für weitere Informationen über sie https://developer.xamarin.com/guides/cross-platform/macios/binding/objective-sharpie/tools/ überprüfen oder auch können Sie überprüfen, in der Xamarin Github Bindungen unterstützen https://github.com/mono/monotouch-bindings Wenn Sie spezielle Fragen zu Bindungen haben, lassen Sie es mich bitte wissen

+0

Danke, aber ich habe alle diese oben genannten versucht. Und mein Problem ist 'Sharpie', verwirrt '' ALBBQuPaiService', ist ein Protokoll und eine Schnittstelle. Also ich weiß nicht, wie man das manuell ändert. –