-1

このオブジェクトの配列をファイリングしようとしています:

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];

次に、次のように、NSNumber の配列を使用して NSPredicate でこの配列をフィルター処理します。

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

私はこれを試しました:

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

しかし、filteredObject は空です。どうすればよいですか?

4

3 に答える 3

0

これを一度チェックして、

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

元:-

 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";
    }
)
于 2013-07-24T11:24:36.720 に答える
0

置き換えてみてください

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

それ以外の

@property (assign) int id_object;
@property (nonatomic, strong) NSString *name;
于 2013-07-24T11:26:41.853 に答える
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

初期化を置き換えると、テスト ケースが正常に実行されます。

編集:私のテストケース、カットアンドペースト;

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"}
于 2013-07-24T11:27:41.797 に答える