Nic*_*man 322 objective-c uitableview ios
所以我为我的学校制作了一个RSS阅读器并完成了代码.我跑了测试,它给了我这个错误.这是它所指的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell =
[tableView dequeueReusableCellWithIdentifier:CellIdentifier
forIndexPath:indexPath];
if (cell == nil) {
cell =
[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:CellIdentifier];
}
Run Code Online (Sandbox Code Playgroud)
这是输出中的错误:
2012-10-04 20:13:05.356 Reader [4390:c07] *断言失败 - [UITableView dequeueReusableCellWithIdentifier:forIndexPath:],/ SourceCache/UIKit_Sim/UIKit-2372/UITableView.m:4460 2012-10-04 20: 13:05.357 Reader [4390:c07]*由于未捕获异常'NSInternalInconsistencyException'而终止应用程序,原因:'无法使用标识符Cell对单元格进行出列 - 必须为标识符注册一个nib或类,或者在故事板中连接原型单元格" *第一掷调用堆栈:(0x1c91012 0x10cee7e 0x1c90e78 0xb64f35 0xc7d14 0x39ff 0xd0f4b 0xd101f 0xb980b 0xca19b 0x6692d 0x10e26b0 0x228dfc0 0x228233c 0x228deaf 0x1058cd 0x4e1a6 0x4ccbf 0x4cbd9 0x4be34 0x4bc6e 0x4ca29 0x4f922 0xf9fec 0x46bc4 0x47311 0x2cf3 0x137b7 0x13da7 0x14fab 0x26315 0x2724b 0x18cf8 0x1becdf9 0x1becad0 0x1c06bf5 0x1c06962 0x1c37bb6 0x1c36f44 0x1c36e1b 0x147da 0x1665c 0x2a02 0x2935)libc ++ abi.dylib:terminate调用抛出异常
这是它在错误屏幕中显示的代码:
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
Run Code Online (Sandbox Code Playgroud)
请帮忙!
rob*_*off 488
你正在使用这种dequeueReusableCellWithIdentifier:forIndexPath:
方法.该方法的文档说明了这一点:
要点:在调用此方法之前,必须使用
registerNib:forCellReuseIdentifier:
orregisterClass:forCellReuseIdentifier:
方法注册类或nib文件.
您没有为重用标识符注册nib或类"Cell"
.
看看你的代码,你似乎期望dequeue方法返回,nil
如果它没有一个单元格给你.您需要使用dequeueReusableCellWithIdentifier:
for行为:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
Run Code Online (Sandbox Code Playgroud)
请注意,dequeueReusableCellWithIdentifier:
并dequeueReusableCellWithIdentifier:forIndexPath:
有不同的方法.请参阅前者和后者的文档.
如果您想了解自己想要使用的原因dequeueReusableCellWithIdentifier:forIndexPath:
,请查看此问答.
小智 137
我认为这个错误是关于为标识符注册你的笔尖或类.
因此,您可以在tableView:cellForRowAtIndexPath函数中保留您正在执行的操作,只需将以下代码添加到viewDidLoad中:
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
Run Code Online (Sandbox Code Playgroud)
它对我有用.希望它可能有所帮助.
Seb*_*ewe 67
虽然这个问题相当陈旧,但还有另一种可能性:如果您使用的是Storyboard,则只需在Storyboard中设置CellIdentifier即可.
因此,如果您的CellIdentifier是"Cell",只需设置"Identifier"属性:
这样做之后一定要清理你的构建.XCode有时会在Storyboard更新中出现一些问题
iMe*_*elf 59
我有同样的问题替换
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell==nil) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
Run Code Online (Sandbox Code Playgroud)
解决了
Jam*_*ang 26
问题很可能是因为您UITableViewCell
在故事板中配置自定义但您没有使用故事板来实例化您UITableViewController
使用它的UITableViewCell
.例如,在MainStoryboard中,您有一个UITableViewController
名为的子类,MyTableViewController
并且具有一个UITableViewCell
名为MyTableViewCell
"MyCell" 的自定义动态.
如果您UITableViewController
像这样创建自定义:
MyTableViewController *myTableViewController = [[MyTableViewController alloc] init];
Run Code Online (Sandbox Code Playgroud)
它不会自动为您注册自定义tableviewcell.你必须手动注册它.
但是如果你使用storyboard来实例化MyTableViewController
,就像这样:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
MyTableViewController *myTableViewController = [storyboard instantiateViewControllerWithIdentifier:@"MyTableViewController"];
Run Code Online (Sandbox Code Playgroud)
好事发生了!UITableViewController
将自动注册您在storyboard中定义的自定义tableview单元格.
在您的委托方法"cellForRowAtIndexPath"中,您可以像这样创建表格视图单元格:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"MyCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
//Configure your cell here ...
return cell;
}
Run Code Online (Sandbox Code Playgroud)
如果回收队列中没有可重用的单元,dequeueReusableCellWithIdentifier将自动为您创建新单元.
那你就完成了!
小智 19
我只想补充一点,Xcode 4.5dequeueReusableCellWithIdentifier:forIndexPath:
在其默认模板代码中包含了新的代码 - 对于希望使用旧dequeueReusableCellWithIdentifier:
方法的开发人员而言,这是一个潜在的问题.
Ste*_*ven 18
在故事板中,您应该将原型单元格的"标识符"设置为与CellReuseIdentifier"Cell"相同.然后你不会得到那条消息或需要调用registerClass:function.
Dan*_*ieu 18
您需要进入属性检查器并为您的单元格添加名称标识符:
然后你需要让你的标识符与你的出列符匹配,如下所示:
let cell2 = tableView.dequeueReusableCellWithIdentifier("ButtonCell", forIndexPath: indexPath) as! ButtonCell
Run Code Online (Sandbox Code Playgroud)
另外
如果您正在使用笔尖,则可能需要在cellForRowAtIndexPath中注册您的类:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "SwitchCell")
// included for context
let cell = tableView.dequeueReusableCellWithIdentifier("SwitchCell", forIndexPath:indexPath) as! SwitchCell
//... continue
}
Run Code Online (Sandbox Code Playgroud)
在使任何单元格出列之前,请调用此方法或registerNib:forCellReuseIdentifier:方法来告诉表格视图如何创建新单元格.如果指定类型的单元当前不在重用队列中,则表视图使用提供的信息自动创建新的单元对象.
如果先前使用相同的重用标识符注册了类或nib文件,则在cellClass参数中指定的类将替换旧条目.如果要从指定的重用标识符中取消注册该类,则可以为cellClass指定nil.
这是Apples Swift 2.0框架的代码:
// Beginning in iOS 6, clients can register a nib or class for each cell.
// If all reuse identifiers are registered, use the newer -dequeueReusableCellWithIdentifier:forIndexPath: to guarantee that a cell instance is returned.
// Instances returned from the new dequeue method will also be properly sized when they are returned.
@available(iOS 5.0, *)
func registerNib(nib: UINib?, forCellReuseIdentifier identifier: String)
@available(iOS 6.0, *)
func registerClass(cellClass: AnyClass?, forCellReuseIdentifier identifier: String)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
177121 次 |
最近记录: |