gpt4 book ai didi

ios - 在回调中通过引用传递

转载 作者:行者123 更新时间:2023-11-29 02:22:24 24 4
gpt4 key购买 nike

我遇到了一个问题。我通过引用将对象传递给另一个类并在该对象中设置值。现在,当我在回调处理程序中访问此变量时,它是 nil。

我的示例代码是:

A 类:

__block NSString *getListJobId = nil;
ClassB *bobject = [[ClassB alloc]init];
[bobject getItemsWithJobId:&getListJobId onSuccess:^(NSArray *response) {
NSLog(@"job id %@",getListJobId); //It is nil, It should be **shiv**
} onFailure:^(NSError *error) {
}];

B 类:.h

- (void)getItemsWithJobId:(NSString **)jobId onSuccess:(void (^)(NSArray *))completedBlock onFailure:(void (^)(NSError *))failureBlock;

.m

- (void)getItemsWithJobId:(NSString **)jobId onSuccess:(void (^)(NSArray *))completedBlock onFailure:(void (^)(NSError *))failureBlock
{
*jobId = @"shiv";
completedBlock([NSArray new]);
}

我在回调响应的 A 类中得到了这个 jobId nil。我怎样才能将这个值从 B 类获取到 A 类。

我会感谢你的帮助。

最佳答案

您不应该通过引用传递来获取方法中的更新值,因为 ClassA 和 ClassB 的 getListJobId 不指向相同的地址。

Obj-C block 捕获其封闭范围之外的变量值。请参阅“ block 可以从封闭范围捕获值”部分。

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithBlocks/WorkingwithBlocks.html

我们可以从 block 的参数中获取更新值并更新 block 中的 getListJobId,而不是通过引用传递。

A 类:

__block NSString *getListJobId = nil;
ClassB *bobject = [[ClassB alloc] init];
[bobject getItemsWithJobId:getListJobId onSuccess:^(NSArray *response, NSString *updatedJobId) {
getListJobId = updatedJobId;
NSLog(@"job id %@", getListJobId); // job id **shiv**
} onFailure:^(NSError *error) {
}];

B 类:.h

- (void)getItemsWithJobId:(NSString *)jobId onSuccess:(void (^)(NSArray *, NSString *))completedBlock onFailure:(void (^)(NSError *))failureBlock;

.m

- (void)getItemsWithJobId:(NSString *)jobId onSuccess:(void (^)(NSArray *, NSString *))completedBlock onFailure:(void (^)(NSError *))failureBlock
{
NSString *updatedJobId = @"**shiv**";
completedBlock([NSArray new], updatedJobId);
}

关于ios - 在回调中通过引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27982005/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com