【发布时间】:2014-03-16 10:26:18
【问题描述】:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
myFavsTwo = [NSMutableArray arrayWithArray:[NSKeyedUnarchiver unarchiveObjectWithData:[[[NSUserDefaults standardUserDefaults] objectForKey:@"MyFavoritez"] mutableCopy]]];
[self.tableView reloadData];
NSLog(@"Number of items in my array is: %d", [myFavsTwo count]);
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"Number of items in my array is: %d", indexPath.row+1);
[myFavsTwo removeObjectAtIndex:indexPath.row];
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:myFavsTwo] forKey:@"MyFavoritez"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
在删除我的应用程序时不断崩溃:
[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver
archivedDataWithRootObject:myFavsTwo] forKey:@"MyFavoritez"];
如果我“继续”调试,它仍然可以正常工作,并且一切都照常进行... 没有收到任何错误消息,或者只是一个“断点”消息
我的视图将如下所示:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
myFavsTwo = [NSKeyedUnarchiver unarchiveObjectWithData:[[[NSUserDefaults standardUserDefaults] objectForKey:@"MyFavoritez"] mutableCopy]];
[self.tableView reloadData];
NSLog(@"Number of items in my array is: %d", [myFavsTwo count]);
}
信息来自这里:
- (void)buttonPressed:(id) sender
{
NSMutableArray *myfavs = [[[NSUserDefaults standardUserDefaults] objectForKey:@"MyFavoritez"]mutableCopy];
if(myfavs != nil)
{
NSLog(@"Array found. Contents: %@",myfavs);
}
else
{
myfavs = [[NSMutableArray alloc] initWithCapacity:0];
}
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSData *dataRepresentingSavedArray = [currentDefaults objectForKey:@"MyFavoritez"];
if (dataRepresentingSavedArray != nil)
{
NSArray *oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray];
if (oldSavedArray != nil)
_myfavs = [[NSMutableArray alloc] initWithArray:oldSavedArray];
else
_myfavs = [[NSMutableArray alloc] init];
}
[_myfavs addObject:self.word];
[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:_myfavs] forKey:@"MyFavoritez"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSLog(@"Number of items in my array is: %d", [_myfavs count]);
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"passFavs"]) {
FavViewController *con = segue.destinationViewController;
con.myFavsTwo = _myfavs; }
}
希望那不是 TMI
【问题讨论】:
-
您是否尝试过这个问题中的建议 - stackoverflow.com/questions/4186251/… ?你有一个异常断点吗?我原以为您会收到有关断言失败或类似情况的消息
-
我删除了这一行:` [myFavsTwo removeObjectAtIndex:indexPath.row];` 然后由于未捕获的异常 'NSInternalInconsistencyException' 而删除给了我这个终止应用程序,原因:'无效更新:无效的行数在第 0 节中。更新后现有节中包含的行数 (4) 必须等于更新前该节中包含的行数 (4),加上或减去从该节中插入或删除的行数节(0 插入,1 删除)并加上或减去移入或移出该节的行数(0 移入,0 移出)。'
-
@Paulw11 我尝试了您给我的链接上的建议,但无济于事
-
关于不一致的消息是有道理的,因为您正在删除一行但您没有更改基础数据源。您是否在 removeObject 和 deleteRows 调用之前尝试了 [self.tableview beginUpdates] 并在之后尝试了 [self.tableview endUpdates]?
-
@Paulw11 是的,仍然没有错误崩溃......我不知道我做了什么,但我现在修复了它 - 写一个答案,我会给你信用
标签: ios uitableview nsuserdefaults delete-row nskeyedarchiver