我无法删除主视图控制器中的行

Posted

技术标签:

【中文标题】我无法删除主视图控制器中的行【英文标题】:i cannot delete rows in my master view controller 【发布时间】:2014-04-04 01:32:22 【问题描述】:

无法删除行,由于未捕获的异常 'NSInternalInconsistencyException' 正在终止应用程序,原因:'-[__NSCFArray removeObjectAtIndex:]: mutating method sent to immutable object

我有以下几点:

#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

【问题讨论】:

【参考方案1】:

从您的异常中,您应该查看以下代码:


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

虽然属性kryeministrat 被声明为 NSMutableArray ,但kryeministratInfoNSDictionary。这意味着kryeministratInfo 中的值都是不可变的。

所以你可以这样做:


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

【讨论】:

以上是关于我无法删除主视图控制器中的行的主要内容,如果未能解决你的问题,请参考以下文章

无法删除 SearchResultsTableView 单元格后面的行

无法删除分区中的行

SwiftUI:无法删除列表中的行

Firebase + Swift:无法删除 tableView 中的行

在 iOS7 中使用核心数据删除表格视图中的行的奇怪行为

无法使用 ORACLE APEX 删除交互式报表中的行