ios目标C委托方法

ios目标C委托方法,ios,objective-c,sdk,appdelegate,Ios,Objective C,Sdk,Appdelegate,这是我学习目标C的第一天,所以我为自己缺乏知识而道歉 我需要导入一个现有的SKD到一个应用程序,我成功地做到了。现在我需要创建委托方法,但我不知道如何才能做到这一点 这是SDK(SDKManager.h)中包含的头文件的结构: 但我注意到我无法调用其他方法(即appDidReceiveTokens)。 实际上,说明书要求创建这些方法,但我不知道在哪里 非常感谢您的帮助。 谢谢您没有在实现委托方法的文件中直接调用委托方法。复习 为了正确地实现这一点,您可以在类中采用委托,然后实现@必需的和/或@可

这是我学习目标C的第一天,所以我为自己缺乏知识而道歉

我需要导入一个现有的SKD到一个应用程序,我成功地做到了。现在我需要创建委托方法,但我不知道如何才能做到这一点

这是SDK(SDKManager.h)中包含的头文件的结构:

但我注意到我无法调用其他方法(即appDidReceiveTokens)。 实际上,说明书要求创建这些方法,但我不知道在哪里

非常感谢您的帮助。
谢谢

您没有在实现委托方法的文件中直接调用委托方法。复习


为了正确地实现这一点,您可以在类中采用委托,然后实现
@必需的
和/或
@可选的

委托方法。您不可以在实现委托方法的文件中直接调用委托方法。复习


为了正确地实现这一点,您可以在类中采用委托,然后实现
@必需的
和/或
@可选的

委托方法。您不可以在实现委托方法的文件中直接调用委托方法。复习


为了正确地实现这一点,您可以在类中采用委托,然后实现
@必需的
和/或
@可选的

委托方法。您不可以在实现委托方法的文件中直接调用委托方法。复习


要正确实现这一点,您需要在类中采用委托,然后实现
@必需的
和/或
@可选的

委托方法。您已经正确创建了委托协议和存储
SDKManager
委托的属性


setHandler:
initialize:withKEY:
方法是类方法,而
delegate
属性属于
SDKManager
的每个实例。如果没有看到
SDKManager
的实现文件(.m),就很难知道为什么要这样设置它。您可能试图遵循单例模式-如果是这样,请仔细阅读,例如..

您已经正确创建了委托协议和存储
SDKManager
委托的属性


setHandler:
initialize:withKEY:
方法是类方法,而
delegate
属性属于
SDKManager
的每个实例。如果没有看到
SDKManager
的实现文件(.m),就很难知道为什么要这样设置它。您可能试图遵循单例模式-如果是这样,请仔细阅读,例如..

您已经正确创建了委托协议和存储
SDKManager
委托的属性


setHandler:
initialize:withKEY:
方法是类方法,而
delegate
属性属于
SDKManager
的每个实例。如果没有看到
SDKManager
的实现文件(.m),就很难知道为什么要这样设置它。您可能试图遵循单例模式-如果是这样,请仔细阅读,例如..

您已经正确创建了委托协议和存储
SDKManager
委托的属性


setHandler:
initialize:withKEY:
方法是类方法,而
delegate
属性属于
SDKManager
的每个实例。如果没有看到
SDKManager
的实现文件(.m),就很难知道为什么要这样设置它。您可能试图遵循单例模式-如果是这样,请仔细阅读,例如..

原因是您有设置calls setHandler方法和delegate is属性的类方法,因此在何处分配委派以及何时和如何调用委派。我希望您理解什么是类和实例。因此,在创建对象的实例之前,不能调用委托

您有两个不同的类方法用于设置类的某些属性,将它们作为属性是否有意义

更通用、更好的方法是这样的

@protocol SDKManagerDelegate <NSObject>
@required

-(void)appDidReceiveTokens:(NSDictionary*)items
              withResponse:(NSDictionary*)response;

@end

@protocol SDKManagerDelegate;

@interface SDKManager : NSObject


- (instancetype)initWithAppId:(NSString *)appId
                          key:(NSString *)key
                     delegate:(id<SDKManagerDelegate>)delegate;

@end


@interface SDKManager ()

@property (nonatomic, copy, readonly) NSString *appId;
@property (nonatomic, copy, readonly) NSString *key;
@property (nonatomic, weak, readonly) id<SDKManagerDelegate> delegate;

@end


@implementation SDKManager

- (instancetype)initWithAppId:(NSString *)appId
                          key:(NSString *)key
                     delegate:(id<SDKManagerDelegate>)delegate
{
    if (self = [super init]) {
        _appId = [appId copy];
        _key = [key copy];
        _delegate = delegate;
    }
    return self;
}


- (void)doSomeNetworkRequestHere
{
    [self fetchTokenFromServer:^(NSDictionary *tokens, NSDictionary *response){
        [self.delegate appDidReceiveTokens:tokens
                              withResponse:response];
    }];
}

- (void)fetchTokenFromServer:(void(^)(NSDictionary *tokens, NSDictionary *response))completion
{

}

@end
@protocol-SDKManagerDelegate
@必需的
-(void)appDidReceiveTokens:(NSDictionary*)项
withResponse:(NSDictionary*)响应;
@结束
@协议SDKManagerDelegate;
@接口SDKManager:NSObject
-(instancetype)initWithAppId:(NSString*)appId
键:(NSString*)键
代表:(id)代表;
@结束
@接口SDKManager()
@属性(非原子、副本、只读)NSString*appId;
@属性(非原子、复制、只读)NSString*键;
@属性(非原子、弱、只读)id委托;
@结束
@实现SDKManager
-(instancetype)initWithAppId:(NSString*)appId
键:(NSString*)键
委托人:(id)委托人
{
if(self=[super init]){
_appId=[appId副本];
_密钥=[密钥副本];
_代表=代表;
}
回归自我;
}
-(无效)doSomeNetworkRequestHere
{
[self-fetchTokenFromServer:^(NSDictionary*标记,NSDictionary*响应){
[self.delegate appDidReceiveTokens:标记
withResponse:response];
}];
}
-(void)fetchTokenFromServer:(void(^)(NSDictionary*令牌,NSDictionary*响应))完成
{
}
@结束

原因是您有一些类方法可以设置calls setHandler方法和delegate is属性,因此您在何处分配委派以及何时和如何调用委派。我希望您理解什么是类和实例。因此,在创建对象的实例之前,不能调用委托

您有两个不同的类方法用于设置
#import "FirstViewController.h"
#import "SDKManager.h"

@interface FirstViewController ()

@end

@implementation FirstViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    [SDKManager setHandler:[UIApplication sharedApplication].delegate];

    [SDKManager initialize:@"AppId"withKEY:@"1234"];

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
@protocol SDKManagerDelegate <NSObject>
@required

-(void)appDidReceiveTokens:(NSDictionary*)items
              withResponse:(NSDictionary*)response;

@end

@protocol SDKManagerDelegate;

@interface SDKManager : NSObject


- (instancetype)initWithAppId:(NSString *)appId
                          key:(NSString *)key
                     delegate:(id<SDKManagerDelegate>)delegate;

@end


@interface SDKManager ()

@property (nonatomic, copy, readonly) NSString *appId;
@property (nonatomic, copy, readonly) NSString *key;
@property (nonatomic, weak, readonly) id<SDKManagerDelegate> delegate;

@end


@implementation SDKManager

- (instancetype)initWithAppId:(NSString *)appId
                          key:(NSString *)key
                     delegate:(id<SDKManagerDelegate>)delegate
{
    if (self = [super init]) {
        _appId = [appId copy];
        _key = [key copy];
        _delegate = delegate;
    }
    return self;
}


- (void)doSomeNetworkRequestHere
{
    [self fetchTokenFromServer:^(NSDictionary *tokens, NSDictionary *response){
        [self.delegate appDidReceiveTokens:tokens
                              withResponse:response];
    }];
}

- (void)fetchTokenFromServer:(void(^)(NSDictionary *tokens, NSDictionary *response))completion
{

}

@end