这是原来的头文件: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]);
}
}
你有接口,但有没有(有效的)实现? – Joost 2011-01-24 12:27:07