Obj-c - перезагрузить tableView с обновленным NSMutableArray - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь перезагрузить свой tableView с новыми данными (self.filtered, NSMutableArray).Для того, чтобы сделать это, я понимаю, что мне нужно удалить все объекты из оригинального self.filtered и затем заполнить его обновленным NSMutableArray.Однако по какой-то причине, когда я запускаю приведенное ниже, я получаю следующую ошибку сбоя (и да, все значения заполняются в том виде, в каком они должны быть ... например, нет нулевых ответов):

Завершение приложения из-занеобработанное исключение 'NSInvalidArgumentException', причина: '- [__ NSArrayI removeAllObjects]: нераспознанный селектор отправлен в экземпляр 0x28009c540'

Viewcontroller.h

@property (nonatomic, strong) NSMutableArray *filtered;

ViewController.m

-(void)viewDidLoad {
    NSString *myID = [session user][@"user"][@"uid"];

    NSPredicate *p1 = [NSPredicate predicateWithFormat:@"uid ==[cd] %@", targetedUser];
    NSPredicate *p2 = [NSPredicate predicateWithFormat:@"targetuser ==[cd] %@", myID];
    NSPredicate *p3 = [NSPredicate predicateWithFormat:@"uid ==[cd] %@", myID];
    NSPredicate *p4 = [NSPredicate predicateWithFormat:@"targetuser ==[cd] %@", targetedUser];
    NSPredicate *p5 = [NSPredicate predicateWithFormat:@"targetuser ==[cd] %@", universal];

    NSCompoundPredicate *pIntermediary1 = [NSCompoundPredicate andPredicateWithSubpredicates:@[p1, p2]];
    NSCompoundPredicate * pIntermediary2 = [NSCompoundPredicate andPredicateWithSubpredicates:@[p3, p4]];
    NSCompoundPredicate * pIntermediary3 = [NSCompoundPredicate andPredicateWithSubpredicates:@[p1, p5]];
    NSCompoundPredicate *pFinal = [NSCompoundPredicate orPredicateWithSubpredicates:@[pIntermediary1, pIntermediary2, pIntermediary3]];

    self.filtered = [self.messages filteredArrayUsingPredicate:pFinal];
}

- (IBAction)sendReply:(id)sender {
    NSMutableArray *aArr = [NSMutableArray arrayWithObjects:self.filtered,nil];
    NSLog(@"BEFORE IT %@", aArr);

    [aArr addObject:nodeData];

    [self.filtered removeAllObjects];
    [self.filtered addObject:aArr];

    [self.tableView reloadData];
    NSLog(@"LASTLY %@", self.filtered);
}

В этом методе нет NSArrays - только NSMutableArrays, поэтому я не уверен, почему это происходит?

1 Ответ

0 голосов
/ 22 февраля 2019

Строка:

self.filtered = [self.messages filteredArrayUsingPredicate:pFinal];

дает вам NSArray, а не NSMutableArray.

Измените это на:

self.filtered = [[self.messages filteredArrayUsingPredicate:pFinal] mutableCopy];

и затем вашкод будет работать намного лучше.Проверьте это в любой строке, которая пытается установить свойство filtered.

Отдельно от этой проблемы стоит строка:

[self.filtered addObject:aArr];

Это добавление массива в массив, этоне добавляя непосредственно объекты aArr в filtered.

. Измените эту строку на:

[self.filtered addObjectsFromArray:aArr];

или замените строки:

[self.filtered removeAllObjects];
[self.filtered addObject:aArr];

на:

self.filtered = aArr;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...