Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自静态库iOS的委托_Ios_Objective C_Xcode - Fatal编程技术网

来自静态库iOS的委托

来自静态库iOS的委托,ios,objective-c,xcode,Ios,Objective C,Xcode,我无法使委托从我构建的静态库中工作。如果我在单独的项目中这样做,它会正常工作。你能查一下我的密码吗 StaticSdk.h @protocol SdkDelegate; @interface Sdk : NSObject @property (nonatomic, weak) id <SdkDelegate> delegate; +(void)startAction -(void)taskComplete; @end @protocol SdkDelegate <NSObje

我无法使委托从我构建的静态库中工作。如果我在单独的项目中这样做,它会正常工作。你能查一下我的密码吗

StaticSdk.h

@protocol SdkDelegate;
@interface Sdk : NSObject
@property (nonatomic, weak) id <SdkDelegate> delegate;
+(void)startAction
-(void)taskComplete;
@end

@protocol SdkDelegate <NSObject>
-(void)taskGetDataCompleted:(NSMutableData*)pushedData;
@end
然后我将这个静态库包含到我的项目中,并且我指定的委托没有执行

项目代码
ViewController.h

@interface ViewController : UIViewController <SdkDelegate>
-(IBAction) Connect: (id) sender;
@end

我猜您未能在以下方面编译:

SdkDelegate *sdk = [[SdkDelegate alloc] init];

这里的问题是不能实例化协议。相反,您有一个类采用了该协议,看起来您在
ViewController
中正确地采用了该协议。您现在需要做的是将
ViewController
的实例分配给
Sdk
实例的
delegate
属性,在调用
startAction

之前的某个时候,您还不了解如何使用委托,您需要去重新阅读它们的使用方式。另外,您试图在类方法中使用一个(这就是+的意思,为什么一个+和另一个-?这是有意的吗?)。因此,您需要解决一些基本的理解问题,包括类和对象的基本用法。在运行之前,请尝试花一点时间步行。我正在使用静态库中的类方法,以便从project调用。如果我使用实例方法,我将无法访问该方法并获得异常。谢谢您的回答。它编译的很好,只是我可以从我的静态库得到回调,我很惊讶它会编译。这里有一些错误,您肯定无法在
SdkDelegate
上调用
alloc
init
。但是,要正确使用委托模式,需要将委托属性设置为要响应调用的对象,在本例中,该对象是
ViewController
的实例。
- (void)taskGetDataCompleted:(NSMutableData*)pushedData
{
    [imageView setImage:[[UIImage alloc] initWithData:pushedData]];
}
SdkDelegate *sdk = [[SdkDelegate alloc] init];