gpt4 book ai didi

ios - iOS block 参数是否允许以某种方式成为已定义类型的特定子类

转载 作者:行者123 更新时间:2023-12-01 16:43:17 24 4
gpt4 key购买 nike

我有一个具有以下类层次结构的回调:

JSONCustomerObj : JSONObj

这是具有通用 JSONObj block 参数的方法的定义:
-(void) _getRemote:(NSString*) url callback:(void (^)(JSONObj *))callback{
[[NSOperationQueue mainQueue] addOperation:/*do operation extension of NSOperation*/];
}

以下是 _getRemote:callback: 的特定调用,其中 2 次尝试失败。

选项#1
-(void) getCustomer:(void (^)(JSONCustomerObj *))cb{
// I get a compile error
[self _getRemote:@"www.a.com/json" callback:cb];
}

如果我执行上述操作^ 我会收到编译错误。如果我像下面这样包装和转换,我会遇到僵尸崩溃(可能是因为我的 insitchu 功能没有保留)。

选项#2
-(void) getCustomer:(void (^)(JSONCustomerObj *))cb{
// I get a runtime crash (non retained anonymous block?)
[self _getRemote:@"www.a.com/json" callback:^(JSONObj* rsp){
cb((JSONCustomerObj*)rsp);
}];
}

调用任一选项,如下所示
@implementation MyAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[Services sharedInstance] getCustomer:^(JSONCustomerObj* obj){
NSLog(@"name = %@",obj.name);
}];
return YES;
}

这是崩溃如何表现的屏幕截图(请注意,它实际上是 NSLog 退出但不久之后崩溃:

zombie crash

任何帮助将不胜感激!

最佳答案

使用您的方法的确切定义_getRemote:callback:然后像这样转换你的对象:JSONCustomerObj *customer = (JSONCustomerObj *)rsp

关于ios - iOS block 参数是否允许以某种方式成为已定义类型的特定子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22314495/

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