Передайте данные между двумя контроллерами представления, используя "Делегация": Objective-C

Я реализую библиотеку (.a), и я хочу отправить количество уведомлений из библиотеки в приложение, чтобы они могли показывать в своем пользовательском интерфейсе, количество уведомлений. Я хочу, чтобы они реализовали единственный метод, например

-(void)updateCount:(int)count{
    NSLog(@"count *d", count);
}

Как я могу отправить счетчик из моей библиотеки, чтобы он мог использовать его в методе updateCount для показа. Я искал и узнал о функциях обратного вызова. Я понятия не имею, как их реализовать. Есть ли другой способ сделать это.

Ответы

Ответ 1

У вас есть 3 варианта

  • делегат
  • Уведомление
  • Блок, также известный обратный вызов

Я думаю, что вам нужен делегат

Предположим, что у вас есть этот файл как lib

TestLib.h

#import <Foundation/Foundation.h>
@protocol TestLibDelegate<NSObject>
-(void)updateCount:(int)count;
@end

@interface TestLib : NSObject
@property(weak,nonatomic)id<TestLibDelegate> delegate;
-(void)startUpdatingCount;
@end

TestLib.m

#import "TestLib.h"

@implementation TestLib
-(void)startUpdatingCount{
    int count = 0;//Create count
    if ([self.delegate respondsToSelector:@selector(updateCount:)]) {
        [self.delegate updateCount:count];
    }
}
@end

Затем в классе, который вы хотите использовать

#import "ViewController.h"
#import "TestLib.h"
@interface ViewController ()<TestLibDelegate>
@property (strong,nonatomic)TestLib * lib;
@end

@implementation ViewController
-(void)viewDidLoad{
self.lib = [[TestLib alloc] init];
self.lib.delegate = self;
[self.lib startUpdatingCount];
}
-(void)updateCount:(int)count{
    NSLog(@"%d",count);
}

@end