построить NSArray из nsarray уже существует - PullRequest
0 голосов
/ 18 февраля 2012

У меня есть NSArray с JsonValue из моего веб-сервиса.

myArray = [responseString JSONValue];

этот массив дает мне, что в NSLog:

 2012-02-18 18:22:46.338 Test[2758:fb03] myArray: (
            {
            receiver = david;
            sender = sophie;
            message = "test1";
            photo = "****************.jpg";
        },
            {
            receiver = david;
            sender = matt;
            message = "test2";
            photo = "****************.jpg";
        },
            {
            receiver = sophie;
            sender = mike;
            message = "test1";
            photo = "****************.jpg";
        },
            {
            receiver = david;
            sender = ali;
            message = "test1";
            photo = "****************.jpg";
        },
            {
            receiver = mike;
            sender = david;
            message = "test1";
            photo = "****************.jpg";
        },
            {
            receiver = admin;
            sender = david;
            message = "test1";
            photo = "****************.jpg";
        }
    )

Мне нужно создать новый массив только с отправителем= 'David'

я пытаюсь с этим:

for(int i=0;i<[myArray count];i++)
   {
    NSDictionary *dict1=[myArray objectAtIndex:i];


       if ( [[dict1 objectForKey:@"sender"] isEqualToString:@"david"]) 


       {

           NSLog(@"YES");


           myNewArray = [[NSArray alloc] initWithObjects:dict1, nil];

            NSLog(@"array %@",myNewArray);
            NSLog(@"count %d",[myNewArray count]);



       }
       else
       {
           NSLog(@"NO");


           myNewArray2 = [[NSArray alloc] initWithObjects:dict1, nil];

            NSLog(@"array2 %@",myNewArray2);
            NSLog(@"count2 %d",[myNewArray2 count]);
       }
   }

этот myNewArray дает мне что:

           2012-02-18 18:22:46.341 Test[2758:fb03] myNewArray (
        {
            receiver = mike;
            sender = david;
            message = "test1";
            photo = "****************.jpg";
    }
)
          2012-02-18 18:22:46.341 Test[2758:fb03] myNewArray (
        {
            receiver = admin;
            sender = david;
            message = "test1";
            photo = "****************.jpg";
    }
)

Но мне нужно иметь такой массив:

2012-02-18 18:22:46.338 Test[2758:fb03] myNewArray: (

        {
            receiver = mike;
            sender = david;
            message = "test1";
            photo = "****************.jpg";
    },
        {
            receiver = admin;
            sender = david;
            message = "test1";
            photo = "****************.jpg";
    }
)

спасибо за чтение

Ответы [ 3 ]

1 голос
/ 18 февраля 2012

NSArray является неизменным, вам понадобится NSMutableArray. И вы повторно инициализируете новый массив в каждом цикле, что вы не можете сделать, если хотите сохранить предыдущие значения.

NSMutableArray *a = [[NSMutableArray alloc] init];

for (int i = 0; i < [myArray count]; i++) {
    NSDictionary *m = [myArray objectAtIndex:i];

    if ([[m objectForKey:@"sender"] isEqualToString:@"david"]) {
        [a addObject:m];
    }
    ...
}
1 голос
/ 18 февраля 2012

Объявите myNewArray вне цикла и сделайте его NSMutableArray (это позволит добавлять новые объекты)

myNewArray = [[NSMutableArray alloc] array];
for(int i=0;i<[myArray count];i++)
{
    ...
}

затем добавьте объект в этот массив, если какое-либо условие равно

NSLog(@"YES");
[myNewArray addObject:dict1];
1 голос
/ 18 февраля 2012

Есть намного более простой способ. Попробуйте использовать NSArray filteredArrayUsingPredicate:, где предикат в вашем случае выглядит примерно так:

NSString *attribute = @"sender";
NSString *senderFilter = @"david";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K like %@", attribute, senderFilter];

NSArray *filteredArray = [array filteredArrayUsingPredicate:predicate];

Для получения более подробной информации о предикатах, попробуйте Руководство по программированию предикатов .

...