У меня была такая проблема раньше, и она не получила удовлетворительного ответа.NSMutableArray не может быть добавлен в
У меня есть viewcontroller с свойством «counties», которое является NSMutableArray. Я собираюсь развернуть экран навигации, чтобы посмотреть, как выбрать граф для географического поиска. Таким образом, страница поиска развернется на страницу «select counties».
Передаю NSMutableArray *counties
второму контроллеру, когда я нажимаю второй в стеке навигации. Я фактически установил свойство «selectedCounties» второго контроллера (также NSMutableArray) с указателем на «округи» моего первого контроллера, как вы увидите ниже.
Когда я иду в addObject
к этому, хотя, я получаю это:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '*** -[NSCFArray insertObject:atIndex:]: mutating method sent to immutable object'
Вот мой код:
в SearchViewController.h:
@interface SearchViewController : UIViewController
{
....
NSMutableArray *counties;
}
....
@property (nonatomic, retain) NSMutableArray *counties;
в SearchViewController.m:
- (void)getLocationsView
{
[keywordField resignFirstResponder];
SearchLocationsViewController *locationsController =
[[SearchLocationsViewController alloc] initWithNibName:@"SearchLocationsView" bundle:nil];
[self.navigationController pushViewController:locationsController animated:YES];
[locationsController setSelectedCounties:self.counties];
[locationsController release];
}
в SearchLocationsViewController.h:
@interface EventsSearchLocationsViewController : UIViewController
<UITableViewDelegate, UITableViewDataSource>
{
...
NSMutableArray *selectedCounties;
}
...
@property (nonatomic, retain) NSMutableArray *selectedCounties;
в SearchLocationsViewController.m (точка здесь, мы переключая каждый элемент таблицы активны или нет в списке выбранных округов):
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if ([self.selectedCounties containsObject:[self.counties objectAtIndex:indexPath.row]]) {
//we're deselcting!
[self.selectedCounties removeObject:[self.counties objectAtIndex:indexPath.row]];
cell.accessoryView = [[UIImageView alloc]
initWithImage:[UIImage imageNamed:@"red_check_inactive.png"]];
}
else {
[self.selectedCounties addObject:[self.counties objectAtIndex:indexPath.row]];
cell.accessoryView = [[UIImageView alloc]
initWithImage:[UIImage imageNamed:@"red_check_active.png"]];
}
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
Мы умираем в [self.selectedCounties addObject....
.
Теперь, когда я сам NSLog [self.selectedCounties class]
, это говорит мне, что это NSCFArray.
Как это происходит? Я понимаю о пакетах классов (или я ДУМАЮ, я все равно), но это явно конкретный тип, и он теряет его подклассирование в какой-то момент, что убивает все это. Я просто не понимаю, почему это произойдет.
Как вы создаете свой counti es объект? – Vladimir
Где вы назначили «графства»? – kennytm