2012-01-02 93 views
1

我有這樣的具有逗號數據分離 (下面樣品字典)Nspredicate問題

NSMutableArray *sessions = [[NSMutableArray alloc] init];   
demodata * sess = [[demodata alloc] init]; --->nsobject   
[email protected]"Monday";   
[email protected]"HI";   
[email protected]"1,2,3";   
[sessions addObject :sess]; 
[sess release]; 

demodata * sess1 = [[demodata alloc] init]; 
      
[email protected]"Tuesday";   
[email protected]"Bye";   
[email protected]"1,5"; 
[sessions addObject :sess1];     
[sess1 release]; 

我想顯示具有1的id數據只(取決於動態);

例如:我的tableview活動的列表中的每個事件都有一個ID。 例如,如果我選擇id = 1我想要顯示上述兩個對象(1有第一和第二個對象),如果我選擇id = 5我想顯示上述第二個對象(僅有第二個對象) 。

。(我想nspredicate和讀取的每個索引,通過逗號分割)。是有任何簡單的方法來篩選

+0

目前尚不清楚你想要什麼。你應該添加一些例子。 – Max 2012-01-02 14:05:47

+0

@ Max查看我已編輯的問題 – Rams 2012-01-02 14:23:32

+0

並通過什麼信息篩選? – vikingosegundo 2012-01-02 14:32:09

回答

0

id是一個Objective-C保留字指針是指向未知類型的對象。我建議不要將它用作自定義類的屬性。即使它在技術上有效,它可能不會,它會混淆。

我仍然不能確定你想要什麼,但鑄造到的NSString *這是可能的幫助。

((NSString*) ((demodata*)[sessions objectAtIndex:0]).id) //do something with this NSString* 

而不是試圖解析的NSString爲逗號,或許使屬性的NSSArray *保持每個數字作爲一個單獨的索引(將它們包裝在NSNumber第一實例)。

0

像你一樣只提供有關的要求非常模糊的信息,我將展示一個非常通用的方法我現在用積木:

寫陣列類別:

-(NSArray *)filter:(BOOL (^)(id))filterBlock 
{ 
    NSMutableArray *filteredArray = [NSMutableArray array]; 
    for (id element in self) 
     if (filterBlock(element)) 
      [filteredArray addObject:element]; 
    return [NSArray arrayWithArray:filteredArray]; 
} 

現在你有自由創造特定塊匹配您的需求:

array = [array filter:^BOOL(id element) { 
    DemoData *demoData =(DemoData *)element 
    if([[demoData.sessionID componentsSeparatedByString:@","] isEqualToString:@"1"]){ 
     return YES 
    } 
    return NO; 
}]; 

這將過濾所有sessionIDs以「1」。

回覆編輯
您應該以相反的方式做到這一點。你應該有一個NSDictionray,它使用NSNumber作爲鍵和NSArrays與對象。比你只需要問NSArray *array = [dict objectForKey:[NSNumber numberWithInt:5]]。現在數組包含所有連接到id的objets(您應該以不同的名稱命名)。

+0

檢查我的編輯疑問句 – Rams 2012-01-03 04:45:14

+0

看我的響應 – vikingosegundo 2012-01-03 12:05:57

0

如果你想動態的,然後使用predicateWithBlock。如果您想篩選demodata對象,它們的id包含,集合那麼你NSPredicate應該是這樣的:

NSPredicate *filterWhereIdContains1 = [NSPredicate predicateWithBlock: ^BOOL(id evaluatedObject, NSDictionary *bindings){ 
      demodata *sess = (demodata*)evaluatedObject; 
      NSArray *splitIds = [sess.id componentsSeparatedByString:@","]; 
      return [splitIds containsObject:@"1"]; 
}];