я не могу удалить строки в моем контроллере главного представления

124
9

не удается удалить строки, я получаю завершающее приложение из-за неотображенного исключения "NSInternalInconsistencyException", причина: '- [__ NSCFArray removeObjectAtIndex:]: метод мутирования, отправленный в неизменяемый объект

У меня есть следующее:

#import <UIKit/UIKit.h>
@class CSDetailViewController;
@interface CSMasterViewController : UITableViewController
@property (strong, nonatomic) CSDetailViewController *detailViewController;
@property (strong, nonatomic) NSMutableArray *kryeministrat;
@end

и при реализации:

#import "CSMasterViewController.h"
#import "CSDetailViewController.h"

@implementation CSMasterViewController
- (void)awakeFromNib
{
self.clearsSelectionOnViewWillAppear = NO;
self.preferredContentSize = CGSizeMake(320.0, 600.0);
[super awakeFromNib];
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.navigationItem.leftBarButtonItem = self.editButtonItem;

NSString *path = [[NSBundle mainBundle]pathForResource:@"KryeministratList" ofType:@"plist"];
NSDictionary *kryeministratInfo = [NSDictionary dictionaryWithContentsOfFile:path];
self.kryeministrat = [kryeministratInfo objectForKey:@"kryeministrat"];
self.detailViewController = (CSDetailViewController *) [[self.splitViewController.viewControllers lastObject] topViewController];
}
#pragma mark - Table View

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.kryeministrat count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

NSDictionary *kryeministrat = self.kryeministrat[indexPath.row];
cell.textLabel.text = kryeministrat[@"name"];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSDictionary *kryeministrat = self.kryeministrat[indexPath.row];
NSString *urlString = kryeministrat[@"url"];
self.detailViewController.detailItem = urlString;
}
- (void)tableView:(UITableView *)tableView
commitEditingStyle:(UITableViewCellEditingStyle)editingStyle
forRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.kryeministrat removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationAutomatic];
}
@end

спросил(а) 2021-01-25T18:26:16+03:00 4 месяца, 3 недели назад
1
Решение
77

от вашего исключения, вы должны изучить этот код:


NSDictionary *kryeministratInfo = [NSDictionary dictionaryWithContentsOfFile:path];
self.kryeministrat = [kryeministratInfo objectForKey:@"kryeministrat"];

Хотя свойство kryeministrat объявлено как NSMutableArray, kryeministratInfo является NSDictionary. Это означает, что значения в kryeministratInfo являются неизменными.

Итак, вы можете:


NSDictionary *kryeministratInfo = [NSDictionary dictionaryWithContentsOfFile:path];
self.kryeministrat = [NSMutableArray arrayWithArray:[kryeministratInfo objectForKey:@"kryeministrat"]];

ответил(а) 2021-01-25T18:26:16+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема