2014-03-18 30 views
1

(道歉,如果這是一個明顯的答案,我對編程非常陌生)。如何在開關語句中使用謂詞

我有一個用不同類型的結構定義的可變數組。我想要做的是將用戶在文本框中輸入的字符串與數組中的對象進行比較。然後,根據字符串的值,我將在UIWebView中顯示不同的圖片。 (我和數組一起去的原因是因爲我讀過你不能用字符串做Switch語句。)所以我建立了一個謂詞來搜索數組。

但是,我無法弄清楚如何從謂詞到該對象的索引值,以便在switch語句中使用。

我應該遵循不同的策略嗎?這甚至有可能嗎?

-(IBAction)btnAddFabric:(id)sender 
{ 

    myFabrics = [NSMutableArray arrayWithObjects:@"Cotton",@"Fleece",@"Linen",@"Nylon", 
         @"Polyester",@"Rayon",@"Silk",@"Spandex",@"Suede",@"Wool",nil]; 
    NSString *fabricType; 

    fabricType = self.txtType.text; 

    self.lblFabric1.text = fabricType; 

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains  
    %d",fabricType]; 
    NSArray *result = [myFabrics filteredArrayUsingPredicate:predicate]; 


    switch (result) 
    { 
    case 0: 
     imageURLString=[[NSString alloc] initWithFormat:@"<Picture of cotton fabric from  
     Google here>"]; 
     break 

    } 

    [self.fabricPic loadRequest:[NSURLRequest requestWithURL:imageURL]; 
} 
+1

在NSArray文檔中查找'indexOfObject:'。 – Abizern

+0

這裏有很多問題會給你帶來麻煩,首先將一個字符串傳遞給predicateWithFormat構造函數中的%d,然後嘗試傳遞一個NSArray來切換哪一個只對整型值有效。 –

回答

1
-(IBAction)btnAddFabric:(id)sender 
{ 

    myFabrics = [NSMutableArray arrayWithObjects:@"Cotton",@"Fleece",@"Linen",@"Nylon", 
         @"Polyester",@"Rayon",@"Silk",@"Spandex",@"Suede",@"Wool",nil]; 
    NSString *fabricType; 

    fabricType = self.txtType.text; 

    self.lblFabric1.text = fabricType; 

    int result=[myFabrics indexOfObject:fabricType]; 


    switch (result) 
    { 
    case 0: 
     imageURLString=[[NSString alloc] initWithFormat:@"<Picture of cotton fabric from  
     Google here>"]; 
     break 

    } 

    [self.fabricPic loadRequest:[NSURLRequest requestWithURL:imageURL]; 
} 
+0

謝謝!此外,這是我現在:http://media3.giphy.com/media/mcMNAiDvn9tTO/giphy.gif – Michelle

1

不要使用數組和switch語句,使用字典,其中鍵是你的織物類型/名稱和相關的值是URL字符串。

現在,使用謂詞過濾鍵(使用allKeys獲取鍵數組),然後使用結果鍵從字典中獲取URL字符串值。

另外,你真的需要使用謂詞嗎?考慮只顯示結構列表,例如在表格視圖中,並直接使用選定的項目來訪問字典。如果你想要的話,你可以添加一個搜索控制器到表格視圖 - 這會帶來謂詞返回,但篩選到結果列表,而不是直接導致一個結果,就像你當前正在做的那樣。

+0

我確實想過使用表/下拉列表,但我只知道如何做一個單一視圖的應用程序,我承認......我不知道如何處理表格視圖。我真的不需要使用謂詞,我只是不能想出更好的方式來訪問信息。 – Michelle

+0

使用主從模板啓動一個新項目。這將爲您提供表格視圖的結構,以及打開詳細視圖的選擇。然後,您只需填寫您的結構並將URL字符串傳遞到詳細信息視圖以顯示圖像...(即使您只是將其用作實驗/學習) – Wain

1

多的問題在這裏,包括:

  1. 傳遞的NSString%d,使用%@代替
  2. 傳遞一個NSArray切換,只需要整數值
  3. 查詢是區分依賴和韓元不匹配「藍色棉花」

要修復它們,請嘗試並修改以適合它們。

-(IBAction)btnAddFabric:(id)sender 
{ 
    NSArray* myFabrics = @[@"Cotton",@"Fleece",@"Linen",@"Nylon", 
           @"Polyester",@"Rayon",@"Silk",@"Spandex",@"Suede",@"Wool"]; 

    NSString *fabricType; 

    fabricType = self.txtType.text; 

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%@ CONTAINS[c] SELF",fabricType]; 
    NSArray *result = [myFabrics filteredArrayUsingPredicate:predicate]; 

    if(result.count != 0) 
    { 
     switch ([myFabrics indexOfObject:result[0]]) 
     { 
      case 0: 
       imageURLString=[[NSString alloc] initWithFormat:@"<Picture of cotton fabric from Google here>"]; 
       break; 

     } 
    } 
    else 
    { 
     // do something because it doesn't match a known fabric type 
    } 

    [self.fabricPic loadRequest:[NSURLRequest requestWithURL:imageURL]]; 
}