2011-01-24 48 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,但它從未實現過。

相關問題