Objective c 目标C:为什么这个函数名会引起警告?

Objective c 目标C:为什么这个函数名会引起警告?,objective-c,ios,ios4,Objective C,Ios,Ios4,这是原始头文件: @interface TestDataHelper : NSObject { } +(void) populateTestData:(NSManagedObjectContext*) managedObjectContext; +(void) testPopulateTestData:(NSManagedObjectContext*) managedObjectContext; @end 编译此文件时,我收到以下警告: 未找到方法定义 对于testPopulateT

这是原始头文件:

@interface TestDataHelper : NSObject {



}
+(void) populateTestData:(NSManagedObjectContext*) managedObjectContext;

+(void) testPopulateTestData:(NSManagedObjectContext*) managedObjectContext;

@end
编译此文件时,我收到以下警告:

未找到方法定义

对于testPopulateTestData

当我忽略警告并在iphone模拟器中运行应用程序时,我遇到了一个运行时异常:

***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“+[TestDataHelper testPopulateTestData:]:未识别的选择器发送到类0x104d8”

仅将方法重命名为“test”似乎就能解决问题

testXXX
方法名有什么特别之处

编辑:实施已经完成。重命名方法名(在.h和.m中)将删除警告,最终的应用程序将正常工作

编辑2

下面是函数
test
(最初命名为
testPopulatedTestData
)的实现:


错误消息告诉您在头文件中声明了一个从未在任何地方实现的方法。运行时错误告诉您同样的事情-您已将选择器
testPopulateTestData
发送到类
TestDataHelper
,但它从未实现过。

您有接口,但有(有效)实现吗?实现文件在哪里?@Anthony:您需要向我们展示实际的实现是什么,不仅仅是告诉我们您拥有它。它看起来像是您将该方法声明为
testPopulateTestData
,而是将其定义为
testPopulatedTestData
——请注意实现的方法名称中额外的“d”。如果这不仅仅是一个复制粘贴错误,那么问题就解决了。@Richard:我会再检查一遍
+(void) test:(NSManagedObjectContext*) managedObjectContext {

    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Stock" inManagedObjectContext:managedObjectContext];
    [request setEntity:entity];

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    [request setSortDescriptors:sortDescriptors];
    [sortDescriptors release];
    [sortDescriptor release];

    NSError *error = nil;
    NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];

    NSEnumerator *e = [mutableFetchResults objectEnumerator];
    id object;
    while (object = [e nextObject]) {
        // do something with object
        Stock* fc = (Stock*) object; 
        NSLog(@"get a fc %s", [[fc name] description]);
    }

}