gpt4 book ai didi

c++ - 我可以在统一包装器中调用包含 block 的 iOS 代码吗?

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

我在 Objective-C 中有一个方法,该方法进入 NSOperationQueue 并通过 block 异步返回。

例如

+ (void)getDataFromServer:(void(^)(NSArray *data, NSError *error))block;

所以当我尝试使用我的 Objective-C++ 包装器调用它时,

void get_data(const char *GameObjectName, const char *DataCallback,const char *ErrorCallback){
[LibraryClass getDataFromServer:^(NSArray *data, NSError *error) {
if (data) {
UnitySendMessage(GameObjectName, DataCallback, [[data componentsJoinedByString:@","] UTF8String]);
}
if (error) {
UnitySendMessage(GameObjectName, ErrorCallback, [[error localizedDescription] UTF8String]);
}
}];
}

如果我在代码块之前设置断点,字符串 (const char *) 会很好地填充,但如果我在 if (data) {} 部分设置断点 block ,变量被咀嚼,看起来像随机数据。当然,UnityMessageSend() 失败是因为找不到对象。

我的做法是否正确?我怀疑我已经忘记或不知道某些 block /C/C++ 警告。

最佳答案

理想情况下,您应该发布 - [MyClass getDataFromServer:] 的实现,但至少您希望按照@nielsbot 的建议将 block 从堆栈复制到堆,使用 -copy:

void get_data(const char *GameObjectName, const char *DataCallback,const char *ErrorCallback){
[LibraryClass getDataFromServer:[^(NSArray *data, NSError *error) {
if (data) {
UnitySendMessage(GameObjectName, DataCallback, [[data componentsJoinedByString:@","] UTF8String]);
}
if (error) {
UnitySendMessage(GameObjectName, ErrorCallback, [[error localizedDescription] UTF8String]);
}
} copy]]; // <-- call the block's -copy method here
}

关于c++ - 我可以在统一包装器中调用包含 block 的 iOS 代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30632287/

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