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

3

我已经努力一天了,试图让一段代码能够帮助我以更好的方式处理CoreData中的查找和创建(来自这篇文章:http://emplementation.blogspot.nl/2011/12/importing-data-into-core-data-while.html)。最终,我使用了代码块,这是我从未尝试过的。

不知何故,我无法解决以下错误,因为我的typedef与我尝试在函数中定义的内容有所不同。我认为这与块在typedef中被定义为__strong有关,但在我的实现文件中却不同。

错误信息:

不兼容的块指针类型初始化'_strong objectOperationBlock' (aka 'void (^_strong)(NSManagedObjectContext *_strong, NSDictionary *_strong, NSManagedObject *_strong)') with an expression of type '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");
};

感谢您提前为我们的帮助!

在IT技术方面需要翻译的内容。

1
无法重现此问题。您可以详细说明一下吗? - Richard J. Ross III
1个回答

2

我是否错过了typedef应该这样写:

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

2
或者相反,赋值中的“context”变量应该是“NSManagedObjectContext”。 - Phillip Mills
你说得非常正确,难怪它没有起作用。非常感谢,我需要出去透透气! - Kay Lucas
简单的错漏 - 我整个上午都在盯着十年前的Makefile,(不要问我为什么!),刚刚发现了遗漏。 - petert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接