托管对象方法签名

Posted

技术标签:

【中文标题】托管对象方法签名【英文标题】:managed object method signature 【发布时间】:2010-12-12 18:06:07 【问题描述】:

我有下面给出的管理对象;以下为 initFruitStand 方法中的 addCratesObject 引发的警告。为什么它抱怨它不匹配签名虽然它匹配?有什么问题?

在函数中 '-[FruitStandViewController initFruitStand:]':

'FruitStand' 可能不会响应 -addCratesObject:

'(没有匹配方法签名的消息将被 假定返回 'id' 并接受 '...' 作为参数。)

MyViewController.m

#import "FruitStand.h"
#import "Crate.h"

- (IBAction) initFruitStand: (id) sender 
    FruitStand * stand = (FruitStand *) [NSEntityDescription 
        insertNewObjectForEntityForName:@"FruitStand" 
        inManagedObjectContext:self.managedObjectContext];

    Crate * crateOne = (Crate *) [NSEntityDescription   
        insertNewObjectForEntityForName:@"Crate" 
        inManagedObjectContext:self.managedObjectContext];

    [stand addCratesObject:crateOne];

FruitStand.h

#import <CoreData/CoreData.h>
@class Crate;
@interface FruitStand :  NSManagedObject  


@property (nonatomic, retain) NSString* standName;
@property (nonatomic, retain) NSSet* crates;
@end

@interface FruitStand (CoreDataGeneratedAccessors)
- (void)addCratesObject:(Crate *)value;
- (void)removeCratesObject:(Crate *)value;
- (void)addCrates:(NSSet *)value;
- (void)removeCrates:(NSSet *)value;
@end

FruitStand.m

#import "FruitStand.h"
#import "Crate.h"
@implementation FruitStand
@dynamic standName;
@dynamic crates;
@end

Crates.h

#import <CoreData/CoreData.h>
@interface Crate :  NSManagedObject  


@property (nonatomic, retain) NSSet* fruits;
@end

@interface Crate (CoreDataGeneratedAccessors)
- (void)addFruitsObject:(NSManagedObject *)value;
- (void)removeFruitsObject:(NSManagedObject *)value;
- (void)addFruits:(NSSet *)value;
- (void)removeFruits:(NSSet *)value;
@end

Crates.m

#import "Crate.h"
@implementation Crate 
@dynamic fruits;
@end

【问题讨论】:

虽然我看不出您需要这样做的原因,但请尝试在 FruitStand.h 界面中导入您的 Crate.h 标头,而不是使用 @class 声明。 数据建模者以这种方式创建它们。 【参考方案1】:

正如莱斯所说; “这很奇怪,格斯。”

尝试清理项目并重建。或者,使用“预处理”菜单项来显示编译器试图为 MyViewController.m 编译的内容。看看编译器认为 FruitStand 的定义在该编译单元中是什么。

【讨论】:

【参考方案2】:

反正我发现了问题。另一个文件夹中的同一文件的另一个版本似乎已被删除但仍然存在并导致警告。

【讨论】:

这是核心数据版本控制功能的一部分。先手动删除文件,再创建新文件。

以上是关于托管对象方法签名的主要内容,如果未能解决你的问题,请参考以下文章

方法签名中的对象数组

C# DllImport“调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配 ”

函数调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。

托管调试助手 "PInvokeStackImbalance":的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调

在 Swift 中,如何测试一个对象是不是实现了一个可选的协议方法,该方法在签名上有所不同,而无需实际调用该方法?

java中的签名----转载