這是原來的頭文件: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