Массив внезапно пуст - PullRequest
       0

Массив внезапно пуст

0 голосов
/ 19 марта 2012

Для моего UITableView я использую массив в качестве источника данных. Пока все отлично работает. Однако у меня возникает странная проблема: когда я использую поле поиска и ввожу несколько символов, которые я потом снова удаляю, базовый массив внезапно становится пустым. Вот фрагменты кода, которые могут быть полезны для понимания моей проблемы:

Декларация по моему .h

@interface dictionaryViewController : UIViewController <UITableViewDelegate>{
...
...
    NSMutableArray *cardArray;

}

...
@property (retain) NSMutableArray *cardArray;
...

Использование в моем коде .m:

@synthesize cardArray;
...

- (void)viewDidLoad {
[super viewDidLoad];
self.cardArray = [[NSMutableArray alloc] initWithObjects:nil];
...
}

Я заполняю массив данными из моей базы данных SQL:

            [self.cardArray addObject:[NSString stringWithFormat:@"%@ - %@", aQuestion, anAnswer]];

А внутри кода читайте содержимое массива, как в методе cellForRow:

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
...
thisCardIndex = [self.cardArray indexOfObject:cellValue];
...
}

В конце я выпускаю его, вот так (у меня действительно были некоторые другие проблемы с командой release, почему я вместо этого использовал removeObjects):

    [self.cardArray removeAllObjects];
    self.cardArray=nil;

В журнале не вижу ошибки. Однако отладчик показывает, что код завершается с SIGABRT, и при установке точек останова я вижу, что причиной является пустой cardArray.

Заранее спасибо за поддержку.

1 Ответ

0 голосов
/ 20 марта 2012

хорошо, наконец-то нашли виновника, это был [релиз myArray] (см. Прокомментированную строку ниже).Я понятия не имею, ПОЧЕМУ, хотя.Это локальный массив, который я определяю локально, и который также должен быть в состоянии немедленно немедленно освободиться.И что интересно, этот код работает, пока поиск сужается.Вылетает, только когда поле поиска снова пусто.ОЧЕНЬ сбивает с толку, но может у кого-то есть объяснение ??Во всяком случае, наконец-то получил, и это ру, как и ожидалось.

- (void) searchTableView {

NSString *searchText = searchBar.text;
NSMutableArray *searchArray = [[NSMutableArray alloc] initWithObjects:nil];

for (NSDictionary *dictionary in self.listOfItems) {
    NSArray *myArray = [dictionary objectForKey:@"Cards"];
    [searchArray addObjectsFromArray:myArray];

// [myArray release];}

// Counter is needed to get the index of the primary key to dislpay the card in editViewController
int aCounter=0; 
for (NSString *sTemp in searchArray) {
    NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch];

    if (titleResultsRange.length > 0) {
        [self.aCopyListOfItems addObject:sTemp];
        NSInteger myPrimaryKey;
        myPrimaryKey = [[self.cardIDArray objectAtIndex:aCounter] integerValue];
        [self.aCopyOfCardIDArray addObject:[NSNumber numberWithUnsignedInteger: myPrimaryKey]];
    }
}

[searchArray removeAllObjects];
searchArray = nil;
}
...