使用 typedef 的不兼容的块指针类型
Posted
技术标签:
【中文标题】使用 typedef 的不兼容的块指针类型【英文标题】:Incompatible block pointer types using typedef 【发布时间】:2012-06-07 13:15:07 【问题描述】:现在我一直在尝试编写一段代码来帮助我以一种很好的方式处理 CoreData 的查找和创建(从这篇文章中我找到了http://emplementation.blogspot.nl/2011/12/importing-data-into-core-data-while.html)。我最终使用了以前从未做过的代码块。
不知何故,我无法修复以下错误,因为我的 typedef 中的某些内容与我尝试在我的函数中定义的内容不同。我想我理解这与在 typedef 中定义为 __strong 的块有关,但在我的实现文件中有所不同。
错误
初始化“_strong objectOperationBlock”(又名“void (^_strong)”的不兼容块指针类型(NSManagedObjectContext *_strong, NSDictionary *_strong, NSManagedObject *_strong)') 类型为 'void (^)(NSManagedObject *_strong, NSDictionary *_strong, NSManagedObject *_strong)'
MyViewController.h
typedef void (^objectOperationBlock)(NSManagedObjectContext *context,
NSDictionary *hostObjectData,
NSManagedObject *localManagedObject);
MyViewController.m
objectOperationBlock matchedBlock = ^(NSManagedObject *context, NSDictionary *hostObjectData, NSManagedObject *localManagedObject)
NSLog(@"Dosomething");
;
在我所有的尝试中,我发现这可以构建(但它不使用 typedef)
void (^matchedBlock)(NSManagedObject*, NSDictionary*, NSManagedObject*) = ^(NSManagedObject *context, NSDictionary *hostObjectData, NSManagedObject *localManagedObject)
NSLog(@"Dosomething");
;
提前感谢您的帮助!
【问题讨论】:
不能重复这个问题。你能详细说明一下吗? 【参考方案1】:我是否错过了 typedef 应该是:
typedef void (^objectOperationBlock)(NSManagedObject *managedObject,
NSDictionary *hostObjectData,
NSManagedObject *localManagedObject);
【讨论】:
或者相反,赋值中的context
变量应该是NSManagedObjectContext
。
你说的很对,难怪没用。非常感谢,我需要让自己呼吸新鲜空气!
很容易错过 - 我整个早上都在盯着 10 年前的 Makefiles(不要问!),只是发现了遗漏。以上是关于使用 typedef 的不兼容的块指针类型的主要内容,如果未能解决你的问题,请参考以下文章
iOS - AFNetworking GET 方法中不兼容的块指针类型
使用类型表达式初始化 'void(^)(struct ALAssetsGroup *, BOOL *)' 的不兼容块指针类型