NSMutableArray не сохраняет значение даже после установки свойства - PullRequest
0 голосов
/ 13 ноября 2010

В моем приложении для iphone я реализовал SearchBar для TableView.

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

Я поместил снимок экрана с кодом, и операторы NSLog для счетчика copyListOfItems всегда возвращают 0, хотя NSLog (@ "% @", sTemp);отображает искомые элементы в консоли.

Я создал свойство для NSMutableArray copyListOfItems и также синтезировал его, но его число в консоли всегда отображается как ноль.

Вот код:

        searchArray = [Food mutableCopy];

for (NSString *sTemp in searchArray)

     {
    NSLog(@"Value: %@",NSStringFromClass([sTemp class]));

              NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch];

    if (titleResultsRange.length > 0)
    {
        NSLog(@"sTemp is:%@",sTemp);
        NSLog(@" is:%@",sTemp);
        [copyListOfItems addObject:sTemp];
        [copyListOfItems retain];

    }
         NSLog(@"Copy list count in Search Delegate Method inside For : %d",[copyListOfItems count]);
}
NSLog(@"Copy list count in Search Delegate Method : %d",[copyListOfItems count]);
[searchArray release];
searchArray = nil;
searching = YES;
[self.table reloadData];

de:

alt text

Что мне делать?

Пожалуйста, помогите

Пожалуйста, предложите

Спасибо

Ответы [ 5 ]

2 голосов
/ 13 ноября 2010

Из того, что вы сказали, похоже, что массив copyListOfItems никогда не создается.Синтезирование свойства создает пару методов доступа, но не создает автоматически экземпляр NSMutableArray для вас.

Так что где-то вам нужно будет вызвать [[NSMutableArray alloc] init] (или какой-либо вариант * 1006).*) и присвойте результат переменной экземпляра или вызовите [NSMutableArray array] (или вариант array...) и передайте результат в качестве аргумента методу setCopyListOfItems:.

1 голос
/ 16 ноября 2010

Упс .. !!!! Очистил мой проект, собрал и запустил снова, и он начал работать. Спасибо, ребята, за помощь ...:]

1 голос
/ 13 ноября 2010

Убедитесь, что вы всегда выделяете init NSMutableArray. Если вы этого не сделаете, все элементы, которые вы добавите, просто исчезнут. Поэтому убедитесь, что вы делаете это где-то:

searchArray = [[NSMutableArray alloc] init];
1 голос
/ 13 ноября 2010

Я могу только предположить, что вы перевыпускаете элементы в массиве.Похоже, что вы недостаточно хорошо разбираетесь в концепции сохранения / выпуска, поскольку вы чрезмерно сохраняете NSArray copyListOfItems.Вы не должны вызывать -retain для одного и того же объекта в цикле, так как вы увеличиваете счетчик сохранения одного объекта на 1 для каждой итерации цикла.

Кроме того, что выводит этот код вего NSLog () вызывает?Это не имеет большого смысла.Почему вы пытаетесь взять изменчивую копию (которая, кажется,) класса с именем Food?

Что такое «еда»?Объект объективного C или класс объективного C?По моему мнению, это вообще не должно компилироваться, если только оно не очень плохо названо.

0 голосов
/ 15 ноября 2010

где вы создаете массив copyListOfItems?

Я полагаю, что copyListOfItems равен нулю. И вы пытаетесь добавить что-то в массив nil и пытаетесь сохранить nil.

Примечание: на какую бы операцию вы ни делали ноль, это не повлияет. Проверьте, правильно ли вы создаете массив copyListOfItems.

А почему вы пытаетесь сохранить тот же массив после добавления каждого объекта?

...