2011-12-27 121 views
0

我只是在Xcode 4.2中學習Objective-C。我想要做的事情應該很簡單,但是這會讓我發瘋。我試圖從一個類方法傳遞一個NSString對象到另一個類方法,並且我已經能夠成功地傳遞NSArray的。在兩個類方法之間傳遞NSString對象

我環顧四周,發現如何在兩個實例方法(我可以很好地工作)之間傳遞NSString對象的問題。這兩個類的有如下:

+ (double)numberOfOperations:(NSArray *)program equalityTest:(NSString *)testForEquality 
{ 
    NSSet *stackSet = [[NSSet alloc] initWithArray:program]; 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:testForEquality]; 
    NSSet *filteredStackSet = [stackSet filteredSetUsingPredicate:predicate]; 
    return [filteredStackSet count]; 

} 

+ (double)descriptionOfProgram:(NSMutableArray *)program 
{ 
    NSArray *stack = [program copy]; 

    double test = [self numberOfOperations:stack equalityTest:@"+"]; 
    return test; 
} 

當我編譯和運行上面的代碼,我會在運行時錯誤「無法解析字符串‘+’我也粘貼了以下debbuger代碼:

2011-12-27 14:51:53.755計算器[320:F803] *終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因: '無法分析格式字符串 「+」'
*
首先拋出調用堆棧:
(0x13be052 0x154fd0a 0x94fdc1 0x94fbdf 0x94fb93 0x46fb 0x4829 0x 3c9c 0x2ac3 0x2a3e 0x13bfec9 0x185c2 0x1855a 0xbdb76 0xbe03f 0xbd2fe 0x3da30 0x3dc56 0x24384 0x17aa9 0x12a8fa9 0x13921c5 0x12f7022 0x12f590a 0x12f4db4 0x12f4ccb 0x12a7879 0x12a793e 0x15a9b 0x1f38 0x1e95) 終止叫做拋出異常(GDB)。

它甚至可以在類之間傳遞NSString對象嗎?如果您需要更多信息,請與我們聯繫。

回答

1

@"+"不是有效的謂詞格式,它正在吐痰虛擬文件,因爲它無法創建具有指定格式的NSPredicate對象。這與傳遞字符串無關。

Predicate Programming Guide進行一次快速查看,看看謂詞字符串應該是什麼樣子。

+0

謝謝!我能夠重新格式化謂詞,現在它工作正常。 – 2011-12-27 22:00:01

0

問題不在於傳遞字符串,那是工作正常。問題在於謂詞。 「+」不是一個有效的謂詞,它沒有任何意義。有關創建謂詞的更多信息,請參閱Predicate Programming Guide

+0

謝謝!我能夠重新格式化謂詞,現在它工作正常。 – 2011-12-27 22:00:20