- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序运行良好,我没有将其修改为具有专用的数据 Controller 类,而不是像在初始测试期间那样在主 UI 类中处理数据。然而,自从更改以来,当向 TableView 添加新项目时,它不断崩溃。
崩溃的代码行和错误是;
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
2012-07-22 07:17:44.772 speecher[1897:707] * Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'attempt to insert row 0 into section 0, but there are only 0 rows in section 0 after the update'
该类(主 MasterViewController 类)的完整代码如下。
//
// SpeecherMasterViewController.m
// speecher
//
//
#import "SpeecherMasterViewController.h"
#import "SpeecherDataController.h"
#import "SpeecherDetailViewController.h"
@interface SpeecherMasterViewController () {
NSString *newTitle;
NSMutableArray *_speeches;
NSMutableArray *_content;
SpeecherDataController *object;
}
@end
@implementation SpeecherMasterViewController
@synthesize detailViewController = _detailViewController;
- (void)awakeFromNib
{
self.clearsSelectionOnViewWillAppear = NO;
self.contentSizeForViewInPopover = 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;
UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)];
self.navigationItem.rightBarButtonItem = addButton;
self.detailViewController = (SpeecherDetailViewController *)[[self.splitViewController.viewControllers lastObject] topViewController];
object = [[SpeecherDataController alloc] init];
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return YES;
}
#pragma mark - Table View
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [object returnNoObjects];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
cell.textLabel.text = [object returnTitle:indexPath.row];
return cell;
}
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
// Return NO if you do not want the specified item to be editable.
return YES;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
[_speeches removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
} else if (editingStyle == UITableViewCellEditingStyleInsert) {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view.
}
}
/*
// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
}
*/
/*
// Override to support conditional rearranging of the table view.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
// Return NO if you do not want the item to be re-orderable.
return YES;
}
*/
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *titleobj = [object returnTitle:indexPath.row];
NSString *contentobj = [object returnContent:indexPath.row];
self.detailViewController.detailItem = titleobj;
self.detailViewController.detaitContent = contentobj;
}
- (void)insertNewObject:(id)sender
{
//Make sure clear before we start, also make sure initalized (double redundancy with clear statement at end)
newTitle = @"";
//New Title pop up UIAlert View
UIAlertView * alert = [[UIAlertView alloc]
initWithTitle:@"New Speech"
message:@"Please enter a name for speech"
delegate:self
cancelButtonTitle:@"Create"
otherButtonTitles:nil];
alert.alertViewStyle = UIAlertViewStylePlainTextInput;
UITextField * alertTextField = [alert textFieldAtIndex:0];
alertTextField.keyboardType = UIKeyboardTypeDefault;
alertTextField.placeholder = @"Enter a new title";
[alert show];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
newTitle = [[alertView textFieldAtIndex:0] text];
[object addNewContent:newTitle :@"IT REALLY WORKS!" :@"Nothing"];
//create new speech title, add to array and add to tableview
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
//Clear newTitle for use next time
newTitle = @"";
}
@end
编辑:
根据注释修改添加[object addNewContent]
方法和类,
//
// SpeecherDataController.m
// speecher
//
//
#import "SpeecherDataController.h"
@interface SpeecherDataController ()
{
NSMutableArray *titles;
NSMutableArray *content;
NSMutableArray *timer;
}
@end
@implementation SpeecherDataController
-(void) addNewContent:(NSString*)sTitle : (NSString*)sContent :(NSString*)sTimer
{
[titles insertObject:sTitle atIndex:0];
[content insertObject:sContent atIndex:0];
[timer insertObject:sTimer atIndex:0];
}
//Methods to return data
-(NSString*) returnTitle:(NSUInteger)row
{
return [titles objectAtIndex:row];
}
-(NSString*) returnContent:(NSUInteger)row
{
return [content objectAtIndex:row];
}
-(NSString*) returnTimer:(NSUInteger)row
{
return [timer objectAtIndex:row];
}
-(NSInteger) returnNoObjects
{
return titles.count;
}
@end
最佳答案
问题是 NSMutableArrays 尚未分配和初始化。必须添加检查以查看它们是否有 init,如果没有则进行分配。新支票看起来像这样,
-(void) addNewContent:(NSString*)sTitle : (NSString*)sContent :(NSString*)sTimer
{
if(!titles)
{
titles = [[NSMutableArray alloc] init];
}
if(!content)
{
content = [[NSMutableArray alloc] init];
}
if(!timer)
{
timer = [[NSMutableArray alloc] init];
}
[titles insertObject:sTitle atIndex:0];
[content insertObject:sContent atIndex:0];
[timer insertObject:sTimer atIndex:0];
}
关于ios - TableView insertRowsAtIndexPath 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11598197/
我使用以下方法在表中添加新行: [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnim
我面临这个错误: Assertion failure in -[UITableView _endCellAnimationsWithContext:] 当我尝试使用 insertRowsAtIndex
我有一个包含 uitableview 的导航 Controller ,当我按下一行时,它会在堆栈上弹出一个新的 View Controller ,该 Controller 用于在详细 View 中显示
我正在尝试在用户滚动时将行动态添加到 TableView 的底部。这个想法是用户不会注意到这一点,并且可以“无限”地滚动。 当用户到达表格底部的 40 个单元格时,我想在底部绘制 100 个新单元格。
我浏览了所有在线示例,但无法弄清楚如何正确地将单元格添加到带有动画的 TableView 中。假设我有一个包含一个单元格的部分,我想在用户点击第一个单元格的附件后添加另一个单元格。 我的“添加”方法是
我的应用程序运行良好,我没有将其修改为具有专用的数据 Controller 类,而不是像在初始测试期间那样在主 UI 类中处理数据。然而,自从更改以来,当向 TableView 添加新项目时,它不断崩
* 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“尝试将第 0 行插入第 0 部分,但更新后第 0 部分中只有 0 行” 我意识到这里的问
搜索了又搜索..找不到答案:| 我很确定我正确使用了 insertRowsAtIndexPaths...这是我的代码,以及我收到的错误... 首先,我收到服务器返回的响应,其中包含我想要动态插入到静态
我正在尝试为我的表格 View 实现 insertRowsAtIndexPaths。 在此实现之前,我曾经在用户点击表末尾后调用[self.tableView reloadData]。这种方法有点影响
我在使用 Core Data 时遇到了问题。应用程序崩溃,因为当我插入一个新元素时,我尝试访问一个不存在但它应该存在的单元格。 重要的代码: func controllerWillChangeCont
我有一个 uitableview,我尝试通过 insertRowsAtIndexPaths 函数附加它。如果我只是将数据添加到数据源数组,uitableview 会很好地追加,但让我很难通过上述函数插
我需要在所选行下添加一个新行。我在 didSelectRowAtIndexPath 中使用此代码: [_dataSource insertObject:newDataObject atIndex:in
我正在尝试使用 insertRowsAtIndexPaths 一步将一堆行插入到一个空的 UITableView 中。 (我知道这听起来没什么用,但它是我真正需要做的事情的简化版本。) 我看到的问题是
我有一个UITableView,用户可以在其中插入新行。发生这种情况时,我想重新加载表中的所有旧行。一种解决方案是在插入发生后立即调用 reloadData,这完全有效,但这意味着我看不到插入动画。
我有一个从获取的结果 Controller 填充的表格 View 。我还使用 NSTimer 每分钟进行一次 API 调用,从而引入要显示的任何新数据。这使用带有新托管对象上下文的 GCD 异步发生,
它不会每次都发生,但会随机 insertRowsAtIndexPaths: 使我的应用程序在 tableviews endUpdates 上崩溃。这是代码。 NSURLRequest *request
我正在使用 insertRowsAtIndexPaths 方法向 UITableView 添加行。我将此代码放在 [myTable beginUpdates]; 和 [myTable endUpdat
在表更新之前,我的表数据源只有一个部分,一行: 第 0 节 第 [0,0] 行 更新后数据源返回另外两个部分,每个部分只有一行: 第 0 节 第 [0,0] 行 第 1 节 第 [1,0] 行 第 2
我目前正在使用以下代码在我的 UITableView 中插入单元格: [rottenTableView insertRowsAtIndexPaths:indexPathsToInsert withRo
我正在使用 insertRowsAtIndexPaths 方法将新行添加到我的 UITableView。存在添加重复行的问题。 例如,如果我键入 "HI",然后触摸回车,则会向表格中添加包含文本 "H
我是一名优秀的程序员,十分优秀!