- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在将单元格插入 TableView 时遇到问题,我怀疑这是因为我的 viewController 未被识别为委托(delegate)。我通过 Storyboard设置了 viewController,并将其类设置为我的自定义 ItemViewController 类。我的 View Controller 是这样设置的:
#import "ItemsViewController.h"
#import "DetailViewController.h"
#import "ItemCell.h"
#import "Item.h"
#import "ItemStore.h"
@implementation ItemsViewController
//designated initializer
-(instancetype) initWithStyle:(UITableViewStyle)style {
return [self init];
}
-(void) viewDidLoad {
self.tableView.delegate = self;
self.tableView.dataSource =self;
}
-(void) viewWillAppear:(BOOL)animated {
//execute the super code in case there's work to be done by it
[super viewWillAppear:YES];
//reload the data to reflect any changes made either by a user or the program
[self.tableView reloadData];
}
-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//create a detail view controller and initiate it with the selected item
DetailViewController *dvc = [[DetailViewController alloc] init];
NSArray *store = [[ItemStore sharedStore] allItems];
Item *selectedItem = store[indexPath.row];
dvc.item = selectedItem;
//push the detail view controller onto the nav controller
[self.navigationController pushViewController:dvc
animated:YES];
}
-(void) tableView:(UITableView *)tableView
moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath
toIndexPath:(NSIndexPath *)destinationIndexPath {
//move item from one index to another in the table
[[ItemStore sharedStore] moveItemAtIndex:sourceIndexPath.row
toIndex:destinationIndexPath.row];
}
-(NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section {
//number of rows in the table. will adjust with every new item added
return [[[ItemStore sharedStore] allItems] count];
}
-(UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//set up the cell
NSString static *cellIdentifier = @"itemCell";
ItemCell *newCell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (newCell == nil) {
newCell = [[ItemCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
//retrieve the item at the appropriate index
NSArray *items = [[ItemStore sharedStore] allItems];
Item *newItem = items[indexPath.row];
newCell.nameLabel.text = newItem.itemName;
newCell.serialLabel.text = newItem.serialNumber;
newCell.valueLabel.text = [NSString stringWithFormat:@"%d", newItem.value];
return newCell;
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
//create an empty item object
Item *newItem = [[ItemStore sharedStore] createItem];
NSArray *itemStore = [[ItemStore sharedStore] allItems];
//insert a row with the appropriate path
NSIndexPath *path = [NSIndexPath indexPathForRow: [itemStore count]
inSection:0];
[self.tableView insertRowsAtIndexPaths:@[path]
withRowAnimation:UITableViewRowAnimationTop];
DetailViewController *dvc = segue.destinationViewController;
dvc.item = newItem;
}
我的意图是,当用户单击“添加项目”时,将在 tableView 中创建一个新单元格以及一个空的 Item 对象,我会将其传递给我正在继续访问的 (DetailViewController)。
当我尝试运行此代码时出现错误:“由于未捕获的异常‘NSInternalInconsistencyException’而终止应用程序,原因:‘尝试将第 1 行插入第 0 节,但第 0 节中只有 1 行更新后'" 根据我在网上阅读的内容,这是因为数据源/委托(delegate)未在“numberOfRowsInSection”中返回正确的行数。我的项目(itemStore、item)的来源都很好,调试器证明了这一点。
有人对此有任何意见吗?我是否为我的 tableView 设置了委托(delegate)/数据源错误?
编辑:提供 Storyboard截图并解释“添加项目”界面
最佳答案
我认为,您正在尝试创建错误的 NSIndexPath。试试这个:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
//create an empty item object
Item *newItem = [[ItemStore sharedStore] createItem];
NSArray *itemStore = [[ItemStore sharedStore] allItems];
//insert a row with the appropriate path
NSIndexPath *path = [NSIndexPath indexPathForRow: ([itemStore count]-1)
inSection:0];
[self.tableView insertRowsAtIndexPaths:@[path]
withRowAnimation:UITableViewRowAnimationTop];
DetailViewController *dvc = segue.destinationViewController;
dvc.item = newItem;
}
关于ios - UITableView 数据源和委托(delegate)的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36457238/
我看了很多文章,但我仍然不清楚我们通常创建的普通委托(delegate)和多播委托(delegate)之间的区别。 public delegate void MyMethodHandler(objec
考虑以下几点: Action a1 = new Action(_insert); Action a2 = new Action(a1); a2 指的是什么?它是 a1,a1 的浅拷贝还是 a1 的深拷
我希望这听起来像是一个显而易见的问题,但是委托(delegate)返回类型是否也必须与其委托(delegate)的方法的返回类型相匹配? EG,像这样: public static void Save
我想使用 Kotlin 委托(delegate),但我不想在委托(delegate)人之外创建委托(delegate)。委托(delegate)的所有示例都如下所示: interface Worker
class SuperClass { var delegate : SuperClassDelegate? } protocol SuperClassDelegate { func d
我有一个加载 View 的 View ,需要将 View 推送到主导航 Controller 。 我已经为每个 View 设置了一个委托(delegate),并且基本上使我的调用沿着“链”返回到主导航
为简单起见,假设我想创建一个自定义 UITextField 并向其添加一个简单的行为;也就是说,如果文本字段成为第一响应者,背景颜色将变为绿色。 为此,在我的自定义类中,我必须将该类设置为委托(del
我非常有信心我应该能够使用非静态方法的委托(delegate),但下面给了我一个错误: public class TestClass { private delegate void TestD
在 C# 中不能从 System.Delegate 或 System.MulticastDelegate 继承。只要您声明标准的“运行时托管”方法,就完全可以在 MSIL 中执行此操作。但是,每次我向
我在 Storyboard 中定义了一个 iPad 界面,带有一个 SplitViewController。我想将 SplitViewController 的委托(delegate)设置为指向详细 C
我有几个解析器。有一个顶级的可以委托(delegate)给另一个。 Parser我们从 Reader 中获取他们的输入(可变)。我只想要一个 Parser为了能够一次解析,只有一个解析器应该有 Rea
一直以来我都在阅读关于反射的文章,每个人都在说:“反射很慢”,“反射很慢”。 现在我决定测试速度有多慢,令我惊讶的是,使用反射创建的委托(delegate)实际上是使用 lambda 创建的委托(de
在 Xcode 4.5 中启动了 Cocos2D 2.1 模板(没有物理引擎),针对 iOS 6 和 iPad。在 CDAudioManager.m 文件中,以下代码... AVAudioSessio
以下是来自未管理的 dll 的函数代码。它接受一个函数指针作为参数,并简单地返回被调用函数返回的值。 extern __declspec(dllexport) int _stdcall callDe
//NewCharts.h #import @interface NewCharts : UIViewController @property(nonatomic,retain)IBOutlet U
鉴于以下 MSDN 示例代码,为什么我不能定义 Action 委托(delegate)“内联”: public static void Main(string[] args) { Action
在虚幻引擎中,UFUNCTION用于通过附加说明符来丰富功能,以用于蓝图使用、复制和委托(delegate)。 然而,一些委托(delegate)类型似乎不允许绑定(bind) UFUNCTION(如
我刚刚将照片选择器放入我的项目中,一切正常。唯一的事情是它坚持在我设置委托(delegate)的地方给我以下警告 - Assigning to 'id' from incompatible type
我有一个 UIImageView 的子类,并且想将 self 作为参数传递给委托(delegate)。我在 MyImageView 之前收到错误“预期 ')'”。我需要将对象传递给委托(delegat
我正在开发 iOS 10 的语音转文本功能。 我希望调用 SFSpeechRecognitionTaskDelegate 的委托(delegate)方法来检查完成的结果。 func speechRec
我是一名优秀的程序员,十分优秀!