从 table 视图 objective c 中删除元素

delete element from table view objective c

我有一个 table 视图,其中充满了用户定义的数据。该数组是从 nsuserdefaults 收集的,并显示在 table 视图控制器中。我正在尝试实现删除功能。看起来不错,但是当我按删除时出现错误

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFArray removeObjectAtIndex:]: mutating method sent to immutable object'

我有 Favourites.h

的代码
#import <UIKit/UIKit.h>

@interface FavoritesViewController: UITableViewController <UITableViewDelegate, UITableViewDataSource>
@property(nonatomic, strong) IBOutlet UITableView *tableView;
@property (nonatomic,strong) NSMutableArray *favoriteItems;

@end

然后是我初始化的部分

- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];

favoriteItems= [[NSUserDefaults standardUserDefaults] objectForKey:@"favoritesArray"];
[self.tableView reloadData];


}

我感觉上面的代码就是问题所在。 NS用户默认值;我期望是一个 NSArray。那我怎么改呢 Mutable?

为了利益起见下面设置删除方法

 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
    //remove the deleted object from your data source.
    //If your data source is an NSMutableArray, do this
    [self.favoriteItems removeObjectAtIndex:indexPath.row];
    [[NSUserDefaults standardUserDefaults] setObject:favoriteItems forKey:@"favoritesArray"];
    [self.tableView reloadData]; // tell table to refresh now
  }
}

非常感谢提前的帮助。

问题是 [[NSUserDefaults standardUserDefaults] objectForKey:@"favoritesArray"] 返回的是 NSArray,而不是 NSMutableArray

解决方案是在从 NSUserDefaults 加载数组时创建数组的可变副本:

[[[NSUserDefaults standardUserDefaults] objectForKey:@"favoritesArray"] mutableCopy];

这是 Objective-C 类型系统中最令人困惑的方面之一。您自然会认为,如果系统允许您为 NSMutableArray 变量赋值,那么它一定是 NSMutableArray(在 Swift 中,您是对的)。但是在 ObjC 中绝对不能保证这一点——语法使语言看起来像是静态类型的,但事实并非如此。