使用typedef的不兼容的块指针类型

时间:2012-06-07 13:15:08

标签: objective-c cocoa objective-c-blocks

有一天,我一直试图让一段代码能够帮助我以一种很好的方式处理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 个答案:

答案 0 :(得分:2)

我是否错过了typedef应该读取的内容:

typedef void (^objectOperationBlock)(NSManagedObject *managedObject,
                                     NSDictionary *hostObjectData,
                                     NSManagedObject *localManagedObject);