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