2011-01-24 60 views
0

这是原来的头文件:Objective-C:为什么这个函数名称会引起警告?

@interface TestDataHelper : NSObject { 



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

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

@end 

当我编译这个文件,我得到了这样的警告:

method definiton not found

为testPopulateTestData

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

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[TestDataHelper testPopulateTestData:]: unrecognized selector sent to class 0x104d8'

重命名方法“测试”本身似乎就解决问题

什么特别之处testXXX方法的名字吗?

编辑:执行是在那里和完成。重命名方法名称(在.h和.m中)将删除警告,并且最终的应用程序工作。

编辑2

下面是函数test(原名testPopulatedTestData)的实现:

+(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]); 
    } 

} 
+1

你有接口,但有没有(有效的)实现? – Joost 2011-01-24 12:27:07

回答

1

该错误消息告诉你,你已经宣布的方法你头文件,你从来没有实现任何地方。运行时错误告诉你同样的事情 - 你已经将选择器testPopulateTestData发送到类TestDataHelper,但它从未实现过。