Как сохранить данные из разбора в NSArray iOS

Как я могу сохранить данные из синтаксического анализа в NSArray в формате ниже. который используется для заполнения UITableView, который должен использоваться для панели поиска.

_candyArray = [NSArray arrayWithObjects:
                  [Candy candyOfCategory:@"chocolate" name:@"chocolate bar" mName:@"test1"],
                  [Candy candyOfCategory:@"chocolate" name:@"chocolate chip" mName:@"test1"],
                  [Candy candyOfCategory:@"chocolate" name:@"dark chocolate" mName:@"test1"],
                  [Candy candyOfCategory:@"hard" name:@"lollipop" mName:@"test1"],
                  [Candy candyOfCategory:@"hard" name:@"candy cane" mName:@"test1"],
                  [Candy candyOfCategory:@"hard" name:@"jaw breaker" mName:@"test1"],
                  [Candy candyOfCategory:@"other" name:@"caramel" mName:@"test1"],
                  [Candy candyOfCategory:@"other" name:@"sour chew" mName:@"test1"],
                  [Candy candyOfCategory:@"other" name:@"peanut butter cup" mName:@"test1"],
                  [Candy candyOfCategory:@"other" name:@"gummi bear" mName:@"test1"], nil];

Я попробовал приведенный ниже код, но id не загрузил никаких данных, продолжает возвращать значение как null, когда я запускаю его через NSLog

PFQuery *query = [PFQuery queryWithClassName:self.parseClassName];
[query orderByAscending:@"Name"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if (!error) {
        {
            self.arrayName = objects;
        }   
    }else {
        NSLog(@"Error, %@ %@",error,[error userInfo]);
    }
}];

NSLog(@"Array : %@", arrayName);

Есть ли способ сохранить данные в указанном выше типе массива?


person mugunthan    schedule 31.01.2014    source источник
comment
Вы NSLog() NSArray *objects удостоверились, что действительно получили нужные объекты?   -  person MrBr    schedule 31.01.2014
comment
попробуйте войти в блок findObjectsInBackgroundWithBlock:   -  person Akhilrajtr    schedule 31.01.2014
comment
он работал, пока он был в блоке, но он все еще не отображается в массиве выше   -  person mugunthan    schedule 31.01.2014
comment
@mugunthan ваш NSLog(@"Array : %@", arrayName); будет работать до завершения findObjectsInBackgroundWithBlock   -  person Akhilrajtr    schedule 31.01.2014
comment
Выходы _Candyarray As ‹Candy: 0x9AD7090›, ‹Кэнди: 0x9A7F6B0›, ‹Кэнди: 0x9AD6E10›, ‹Кэнди: 0x9AD9B10›: 0x9AD40F0 ›,‹ Candy: 0x9AD72E0: 0x90f0 ›,‹, Candy: 0x9Ad72e0, 0x90f0 ›, 0x. ›, ‹Candy: 0x9adc8a0›, ‹Candy: 0x9ad6d30›, в то время как один из parse.com выводит детали, доступные в столбце ‹movienow:0gC8p3Abia:(null)› {\n Name = \ Keanu Reeves, Hiroyuki Sanada, Ко Шибасаки\;\n category = \action\;\n}   -  person mugunthan    schedule 31.01.2014
comment
@mugunthan - Нет, не так. Наверняка есть начальные/конечные символы () и/или {}, и они значимы.   -  person Hot Licks    schedule 01.02.2014


Ответы (3)


Откуда берутся ваши конфеты? Если это пользовательский класс, то он, скорее всего, не будет сохранен для синтаксического анализа.

Вот один из способов использования ваших существующих данных, но, возможно, лучше создать подкласс PFObject. (Проверьте это в документах)

NSMutableArray * candyObjects = [NSMutableArray alloc]init];

for (Candy * candy in _candyArray) {   
    PFObject * newCandy = [PFObject objectWithClassName:@"Candy"];
    newCandy[@"category"] = candy.category; // or however you store your candy object's properties
    newCandy[@"name"] = candy.name; // I prefer lowercase names, I notice you're querying uppercase
    newCandy[@"mName"] = candy.mName;

    [candyObjects addObject:newCandy];
}

[PFObject saveAll:candyObjects]; // should run in background, but for now just showing to save.

Хорошо, следующий шаг — их получение. (в основном пример rajjjjj с несколькими изменениями)

PFQuery *query = [PFQuery queryWithClassName:@"Candy"];
[query orderByAscending:@"name"]; // lowercase to match above
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if (!error) {
        NSLog(@"retrievedObjects:%@", objects);

        // Now to get them back into an array like you wanted before
        // again, perhaps you could skip this by subclassing your candy ob

        for (PFObject * obbie in objects) {
            // mutableArrayRef represents wherever you'd like your candies added.
            // make sure it has memory allocated, and it has been initialized
            [mutableArrayRef addObject:[Candy candyOfCategory:obbie[@"category"] name:obbie[@"name"] mName:obbie[@"mName"]]];
        }

        // now continue in whatever way you please, all of your candy should be in mutableArrayRef
        // if you're doing multiple searches, make sure you clear the array before adding
        // otherwise you will stack the data and get undesired results
    }
    else {
        NSLog(@"Error, %@ %@",error,[error userInfo]);
    }
}];

Затем, если вы хотите сохранить их обратно в массив, как изначально было указано в вашем вопросе

person Logan    schedule 31.01.2014

Причина, по которой он является нулевым, заключается в том, что

findObjectsInBackgroundWithBlock

не завершается, когда выполняется этот оператор журнала. Если вы хотите обработать результаты (или зарегистрировать их), вам нужно поместить оператор журнала внутри блока или вы можете использовать

findObjectsInBackgroundWithTarget:selector:

вместо этого и иметь код обработки в вашем методе обратного вызова.

person Marius Waldal    schedule 13.03.2014

Вы не выделили массив, я думаю, поэтому измените свой код следующим образом

PFQuery *query = [PFQuery queryWithClassName:self.parseClassName];
[query orderByAscending:@"Name"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
    {
        self.arrayName = [[NSArray alloc]initwithArray:objects];
    }   
}else {
    NSLog(@"Error, %@ %@",error,[error userInfo]);
}
}];

NSLog(@"Array : %@", self.arrayName);
person Rajjjjjj    schedule 31.01.2014