2016-08-19 37 views
1

我有我的uitableview數據從nsmutablearray加載,但我也想過濾。數據加載完美,但現在我需要應用過濾功能,並重新加載表。這裏是到目前爲止我的代碼,我寫了過濾,但它不工作過濾NSMutableArray並將其保存回自己

NSPredicate *sPredicate; 
    for (int i=0; i<TableArray.count; i++) { 
     float hotelDistanceFloat = [[[TableArray objectAtIndex:i]xmlhotel_distance] floatValue]; 
     NSInteger hotelPrice = [[[TableArray objectAtIndex:i]xmlhotel_price] integerValue]; 

     sPredicate = [NSPredicate predicateWithFormat:@"(%ld <= %d AND %f <= %d)" , (long)hotelPrice, numberOfBudget, hotelDistanceFloat,numberOfDistance]; 
     TableArray = [[TableArray filteredArrayUsingPredicate:sPredicate] mutableCopy]; 

    } 

numberOfBudgetnumberOfDistance從uislider越來越簡單INT值。 TableArray是我的可變陣列,它有所有的tabledata。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return TableArray.count; 
} 

這些都是我的NSMutableArray包含

NSLog(@"Name : %@",[[TableArray objectAtIndex:1]xmlhotel_name]); 
NSLog(@"City : %@",[[TableArray objectAtIndex:1]xmlhotel_city]); 
NSLog(@"Price : %@",[TableArray objectAtIndex:1]xmlhotel_price); 
NSLog(@"Distance : %@",[TableArray objectAtIndex:1]xmlhotel_distance); 
NSLog(@"Image : %@",[[TableArray objectAtIndex:1]xmlhotel_image]); 
NSLog(@"Stars : %@",[[TableArray objectAtIndex:1]xmlhotel_stars]); 

所有這些值都是字符串

+0

你不能正確預測,沒有數組數據的優勢嗎? –

+0

hotelDistanceFloat和hotelPrice是數組中的數組值!對不起,我沒有得到它,請你解釋一下。 –

+0

你能顯示什麼值包含你的數組。 –

回答

1

你也許可以刪除for循環,你並不需要分配陣列,並創建謂語每一次。

NSPredicate *sPredicate = [NSPredicate predicateWithFormat:@"(xmlhotel_price.intValue <= %d AND xmlhotel_distance.floatValue <= %f)", numberOfBudget, numberOfDistance]; 
    NSMutableArray *filteredArray = [NSMutableArray arrayWithArray:[TableArray filteredArrayUsingPredicate:sPredicate]]; 
+0

嘗試過但是應用程序崩潰了 –

+0

原因:' - [__NSCFNumber長度]:無法識別的選擇器發送到實例0xb000000000003e82' –

+0

酷,屬性是字符串,所以轉換爲intValue/floatValue將修復崩潰:-) – arunit21

0

我不知道你所面臨的具體問題,但是這個代碼和平看起來可疑的值:

NSPredicate *sPredicate; 
for (int i=0; i<TableArray.count; i++) { 
    float hotelDistanceFloat = [[[TableArray objectAtIndex:i]xmlhotel_distance] floatValue]; 
    NSInteger hotelPrice = [[[TableArray objectAtIndex:i]xmlhotel_price] integerValue]; 

    sPredicate = [NSPredicate predicateWithFormat:@"(%ld <= %d AND %f <= %d)" , (long)hotelPrice, numberOfBudget, hotelDistanceFloat,numberOfDistance]; 
    TableArray = [[TableArray filteredArrayUsingPredicate:sPredicate] mutableCopy]; 
} 

您應該使用包含字典的數組並應用fil從謂詞到謂詞。應該不需要循環來排序內容。

Plus在您獲得過濾後的數組後重新載入表格。

+0

你能解釋一下我應該怎麼做 –

0

你的缺點

  1. 要篩選的陣列,同時在枚舉陣列。
  2. 謂詞值是從要過濾的數組中選擇的。

你應該做的:

  1. 從輸入(hotelDistanceFloat,numberOfDistance)獲取謂詞的值。
  2. 適用謂語,如:

_

NSPredicate *sPredicate = [NSPredicate predicateWithFormat:@"(hotelPrice <= %d AND numberOfBudget <= %d)" , hotelDistanceFloat,numberOfDistance]; 

TableArray = [[TableArray filteredArrayUsingPredicate:sPredicate].mutableCopy] 
+0

我應該在哪裏放這個代碼?如何獲得酒店價格?如果我這樣說? –

+0

您需要從設置過濾器的位置的輸入中獲取過濾值。 –

+0

把這個代碼放到你想要應用過濾器的時候.. –

相關問題