2013-07-24 48 views
-1

我試圖文件管理器這個對象的數組:NSArray的篩選與NSNumber的NSArray的的用NSPredicate

MyObject.h

@interface MyObject : NSObject 

@property (assign) int id_object; 
@property (nonatomic, strong) NSString *name; 

@end 

所以,例如在我的firstArray我有一些爲MyObject:

MyObject *ob1 = [[MyObject alloc] init]; 
[ob1 setId_Object:1; 
[ob1 setName:@"Carl"]; 

MyObject *ob2 = [[MyObject alloc] init]; 
[ob2 setId_Object:2; 
[ob2 setName:@"Carl"]; 

MyObject *ob3 = [[MyObject alloc] init]; 
[ob3 setId_Object:3; 
[ob3 setName:@"Carl"]; 

NSArray *firstArray = [[NSArray alloc] initWithObjects:ob1,ob2,ob3,nil]; 

然後我想篩選該陣列NSPredicate與NSNumber的陣列,這樣的:

NSArray *secondArray = [NSArray arrayWithObjects:[NSNumber numberWithInt:1],[NSNumber numberWithInt:2],nil]; 

我已經試過這樣:

NSArray *filteredObject = [firstArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"id_object IN %@",secondArray]]; 

但filteredObject是空的,我可怎麼辦?

+0

告訴我們firstArray陣列的數據。 – 2013-07-24 11:14:01

+0

做我已編輯它 – Piero

+0

你需要傳遞的字符串不是一個數組。 – 2013-07-24 11:21:41

回答

0

似乎是你的測試用例是錯誤的。我不認爲你的setId_object在用NSNumber調用它時會做你認爲它的工作;

[ob1 setId_object:[NSNumber numberWithInt:1]]; 
NSLog(@"%d", ob1.id_object); 

> 391 

[ob1 setId_object:1]; 
NSLog(@"%d", ob1.id_object); 

> 1 

更換初始化,使你的測試用例運行正常。

編輯:我的測試案例,cut'n'pasted;

MyObject *ob1 = [[MyObject alloc] init]; ob1.id_object = 1; [ob1 setName:@"Carl"]; 
MyObject *ob2 = [[MyObject alloc] init]; ob2.id_object = 2; [ob2 setName:@"Carl"]; 
MyObject *ob3 = [[MyObject alloc] init]; ob3.id_object = 3; [ob3 setName:@"Carl"]; 

NSArray *firstArray = [[NSArray alloc] initWithObjects:ob1,ob2,ob3,nil]; 
NSArray *secondArray = [NSArray arrayWithObjects:[NSNumber numberWithInt:1],[NSNumber numberWithInt:2],nil]; 

NSArray *filteredObject = [firstArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"id_object IN %@",secondArray]]; 

NSLog(@"%@", filteredObject); 

>>> <MyObject: 0x100110350> {1,"Carl"} 
>>> <MyObject: 0x1001104b0> {2,"Carl"} 
+0

,這只是一個例子,我填的是firstArray以另一種方式,但我敢肯定的是,數組包含正確的值,我的問題是隻有我怎麼可以過濾陣列...你在問題上回答? – Piero

+0

@Piero製作小補丁讓與我正確的結果,你的代碼運行。我可以添加我的完整測試用例。 –

+0

@Piero我的測試用例更新。 –

0

一次檢查這一項,

NSArray *filteredObject = [questionSections filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self.Carl contains %@ OR self.Carl contains %@ ",@"1",@"2"]]; 

EX: -

NSArray* questionSections=[[NSArray alloc] initWithObjects:[[NSDictionary alloc] initWithObjectsAndKeys: 
@"List 3 rooms in your house?",@"name",@"301q.png",@"questionpicture",nil],[[NSDictionary alloc] initWithObjectsAndKeys:@"Name a commonbird?",@"name",@"202q.png",@"questionpicture",nil], nil]; 


NSArray *filteredObject = [questionSections filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self.questionpicture contains %@ OR self.questionpicture contains %@ ",@"2",@"3"]]; 
    NSLog(@"%@",filteredObject); 

O/P: -

(
     { 
     name = "List 3 rooms in your house?"; 
     questionpicture = "301q.png"; 
    }, 
     { 
     name = "Name a common bird?"; 
     questionpicture = "202q.png"; 
    } 
) 
0

嘗試更換

@property (nonatomic, copy) NSNumber* id_object; 
@property (nonatomic, copy) NSString *name; 

而不是

@property (assign) int id_object; 
@property (nonatomic, strong) NSString *name; 
+0

沒什麼變化...... – Piero