2012-05-22 102 views
2

我有一個NSSet在設定@"x",我試圖用實例方法member:,以檢查它,就像這樣:爲什麼NSSet成員方法不起作用?

NSSet *everythingOnStack = [[NSSet alloc] initWithObjects:program, nil]; 
NSSet *variablesOnStack = [[NSSet alloc] initWithObjects:([everythingOnStack member:@"x"]),nil]; 

NSLog(@"Variables on, %@",variablesOnStack); 
NSLog(@"Everything on stack,%@",everythingOnStack); 

member:方法似乎沒有看到@"x"和我不知道爲什麼。以下是NSLog()的輸出。我閱讀文檔,它似乎應該工作。困惑。

2012-05-21 20:43:07.902 Calculator[21589:f803] Variables on, {(
)} 
2012-05-21 20:43:07.904 Calculator[21589:f803] Everything on stack,{(
    (
    1, 
    2, 
    x, 
    "+" 
) 
)} 

我正在通過斯坦福大學在線課程學習Objective C。

回答

3

字符串@"x"不是everythingOnStack的成員。它是program(看起來像一個數組)的任何類型的集合的成員。當你做[everythingOnStack member:@"x"](圓括號是不必要的,順便說一句),你得到nil回來,所以你最終得到一個空集variablesOnStack。這需要你知道你要的對象是在數組中

[[everythingOnStack member:program] objectAtIndex:3] 

注:

爲了獲得@"x"出來的everythingOnStack,你將不得不把它弄出來的program陣列。我不確定這會如何影響您的設計 - 看起來您可能正在實施RPN計算器?

+0

是的,我正在實施一個計算器..通過在iTunes U.斯坦福大學在線課堂真棒課程。在課堂上,推薦使用括號。通過使用正確的NSSet初始化,見下文,成員方法現在工作正常。謝謝你的幫助。如果我有足夠的積分,我會給你投票。 – Hyatt

1

在我看來,你可能會誤解這行代碼:[[NSSet alloc] initWithObjects:program,nil];這增加了一個對象,數組「程序」到您的設置,它不會將「程序」中的每個對象添加到您的設置。如果你想添加數組的每個成員到你的設置,你可以使用NSSet * everythingOnStack = [NSSet setWithArray:program];

如果以這種方式完成,那麼「x」將是您的集合的成員。但是,你會得到一個獨特的集合(我認爲所有的集合),所以如果你在「節目」中有兩次相同的數字,它只會在集合中出現一次。

+0

呃拍攝我希望我有足夠的積分投票給你。你完全正確。 ' NSSet * everythingOnStack = [[NSSet alloc] initWithArray:program]; ' 作品現在偉大! – Hyatt

相關問題