使用 block 做回调函数

本文介绍了一个用于iOS应用中质量数据上传的Objective-C类实现。该类使用AFNetworking库进行HTTP请求,支持将主表和详细表数据转换为JSON格式并上传到指定URL。文章还展示了如何实例化此类及调用其方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

头文件

#import "MyHttpUploadProtocl.h"
#import <Foundation/Foundation.h>

@interface UploadPubQuality : NSObject<MyHttpUploadProtocl>

@property (nonatomic,strong) NSString *uploadUrl;

-(void) startUpload:(NSString *)inspect_primary inspect_detail:(NSString *)inspect_detail  block: (void(^)(NSDictionary * param))callback ;
@end


主文件

#import "UploadPubQuality.h"
#import <AFNetworking.h>
@implementation UploadPubQuality

- (instancetype)init{
    
    NSString *url = AppServiceConfig.GetServiceUrl;
    self.uploadUrl  = [NSString stringWithFormat:@"%@/%@",url,@"UploadQcData"];
    return self;

}

-(void) startUpload:(NSString *)inspect_primary inspect_detail:(NSString *)inspect_detail  block: (void(^)(NSDictionary *))callback {

    
    NSMutableDictionary*dic=[[NSMutableDictionary alloc] init];
    [dic setObject:inspect_primary forKey:@"inspect_primary"];
    [dic setObject:inspect_detail forKey:@"inspect_detail"];
    
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    
    manager.requestSerializer = [AFHTTPRequestSerializer serializer];
    
    manager.responseSerializer = [AFJSONResponseSerializer serializer];
    
    manager.responseSerializer.acceptableContentTypes= [NSSet setWithObjects:@"application/json", @"text/html",@"text/json",@"text/javascript", nil] ;//如果报接受类型不一致请替换一致text/html或别的

    
    [manager POST:self.uploadUrl parameters:dic success:^(AFHTTPRequestOperation *operation, id responseObject) {
        
        if (callback) {
            callback(responseObject);
        }

        
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        
        if (callback) {
            NSDictionary *dict = [[NSDictionary alloc]initWithObjectsAndKeys:@"0",@"flag",@"error",@"msg", nil];
            callback(dict);
        }

    }];
}


@end


调用


- (void)didUploadButttonClicked:(UIButton *)sender
{
    InitDbTableQuality *initd = [[InitDbTableQuality alloc]init];
    NSMutableArray *array = [initd GetDetailIUnUploadTable];
    NSMutableArray *dataArray = [initd GetMainTableWithUpload_flag:0];
    NSString *jsonText = [ModelToJson toJSON:dataArray options:NSJSONWritingPrettyPrinted error:nil];
    NSString *jsonTextDetail = [ModelToJson toJSON:array options:NSJSONWritingPrettyPrinted error:nil];
    UploadPubQuality *upload = [[UploadPubQuality alloc]init];

    [upload startUpload:jsonText inspect_detail:jsonTextDetail block:^(NSDictionary *param){
        
        Boolean flag =  [[param valueForKey:@"flag"] boolValue];
        NSString *msg = (NSString*)[param objectForKey: @"msg" ];
        [HCommon popupSuccessMessage:msg];

        if( flag ){
        [self.HunUploadVC updateUploadFlag];
        NSNotification * notice = [NSNotification notificationWithName:@"uploadSuccess" object:nil userInfo:nil];
        [[NSNotificationCenter defaultCenter]postNotification:notice];

        }


    }];
}



天问Block是一款基于Arduino开源平台的图形化编程软件,它允许用户通过拖拽预设的模块(包括数码管显示模块)来进行编程,而不需要深入理解底层代码。对于数码管的回调函数,通常是在数码管接收到数据并更新显示时触发的。 一个简单的数码管回调函数范例可能会是这样的: ```c++ #include <LiquidCrystal_I2C.h> // 引入用于处理数码管的库 // 定义数码管类,并包含回调函数 class DigitalClock { public: DigitalClock(int clockPin, int dataPin) { display = new LiquidCrystal_I2C(clockPin, dataPin); display->begin(8); // 初始化8段数码管 display->setCursor(0, 1); // 设置光标位置在第二行 updateDisplay(); // 初始显示时间 setCallback(updateDisplayCallback); // 设置回调函数 } private: LiquidCrystal_I2C *display; void updateDisplayCallback() { // 回调函数,当数码管内容变化时执行 time_t now = time(nullptr); // 获取当前时间 struct tm localTime = localtime(&now); display->print(localTime.tm_hour, 0); // 显示小时 display->print(":", 1); // 显示冒号 display->print(localTime.tm_min, 2); // 显示分钟 display->print(":", 3); // 显示冒号 display->print(localTime.tm_sec, 4); // 显示秒数 } void setCallback(void (*callback)(void)) { this->callback = callback; // 存储回调函数指针 } void updateDisplay() { // ... 更新数字显示的代码 ... // 如果需要异步更新,可以设置定时器并在指定时间调用回调 // 比如 Arduino 中的 delayMicroseconds 或 attachInterrupt,具体取决于你的硬件和环境 setCallback(updateDisplayCallback); // 这里再次设置回调防止丢失 } }; int main() { DigitalClock clock(2, 3); // 创建一个连接到GPIO2和GPIO3的数码管实例 while (true) { delay(500); // 每隔半秒检查是否有新的时间数据 } } ``` 在这个例子中,`updateDisplayCallback`是一个在数码管内容变化时被调用的函数,你可以在此处定制你想要的显示逻辑。在初始化`DigitalClock`对象时,我们设置了这个回调函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值