2013-11-14 51 views
0

好的,所以我建立一本書的一致性,似乎一切正常工作期望我的比較函數要麼找出該單詞是否已經在我的數組中,我做了一個基本的比較函數,要麼返回1,-1或0.我知道有一個NSComparisonResults,但我對此更加舒適。反正我想在_wordBeingCatalog比較在我UniqueWord類另一個詞的功能,這就是我在我的類,它幾乎涉及到我的方法比較類內導致錯誤的方法; NSInvalidArgumentException

-(instancetype)initWithString:(NSString*)wordBeingCataloged 
         andline:(NSNumber*)currentLine 
{ 
    self = [super init]; 
    if(self == nil) return nil; 
    _wordBeingCataloged=wordBeingCataloged; 
    _count=0; 
    _LinenumberWhereWordisFound= [[NSMutableArray alloc]init]; 
    [self addALineNumberToCurrentLineNumberArray:currentLine];//This is a function in c++ it looks like addline(currentline); i dont know if i did it right 
    return self; 

} 

-(NSInteger) compareCurrent:(UniqueWord *)word withAnother:(UniqueWord *)text{ 
    if ([word isGreaterThan:text])//crashes here 
    { 
     return 1; 
    } 

    if([text isGreaterThan:word]){ 
     return -1; 
    } 
    return 0; 

} 

-(void) addALineNumberToCurrentLineNumberArray:(NSNumber *)currentLine{ 
    NSInteger index=[ self newIndexUsing:currentLine]; 
    ++_count; 
    if(index==-1) 
     return; 
    [_LinenumberWhereWordisFound insertObject:currentLine atIndex:(0+index)]; 
} 

當我跑我的方法我造成

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '- [UniqueWord compare:]: unrecognized selector sent to instance 0x100201740' 

我的信念是,它不是比較我的兩個字符串中的數組,而是比較其他東西,有人可以請解釋我收到的問題。

順便程序在第一站,如果在比較函數聲明

回答

0

你不列出在UniqueWord類的isGreaterThan:函數的內容,但它必須包含compare:呼叫未執行。

您可能還想考慮更改您的compareCurrent:withAnother:方法以使用常量。

-(NSInteger)compareCurrent:(UniqueWord *)word 
       withAnother:(UniqueWord *)text 
{ 
    if ([word isGreaterThan:text])//crashes here 
    { 
     return NSOrderedDescending; 
    } 

    if([text isGreaterThan:word]) 
    { 
     return NSOrderedAscending; 
    } 
    return NSOrderedSame; 
}