xcode UITableView 向上滚动时应用程序崩溃
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/6466240/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
App crash when UITableView Scrolls up
提问by MGD
I wonder why my app crashes when i scroll my UITableView up.
我想知道为什么当我向上滚动 UITableView 时我的应用程序崩溃。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
NSArray *arrayForNames=[[NSArray alloc]initWithArray:[objContentManager getDuasNamesByGroupName:[arrayDuaGroups objectAtIndex:indexPath.section]]];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
// implementation on cell
}
When i scroll up program crashes at UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
当我向上滚动程序崩溃时 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
I saw the tutorials and all i can't find any different implementation there, it scrolls down pretty smooth but when i scroll back up it crashes straight away, I not figuring out where m doing wrong
我看到了教程和所有我在那里找不到任何不同的实现,它向下滚动非常平滑但是当我向上滚动时它立即崩溃,我不知道我做错了什么
> 2011-06-24 15:07:10.976
> Tasbeeh[503:207] *** Terminating app
> due to uncaught exception
> 'NSRangeException', reason: '***
> -[NSArray objectAtIndex:]: index 1 beyond bounds [0 .. 0]'
> *** Call stack at first throw: ( 0 CoreFoundation
> 0x02553919 __exceptionPreprocess + 185
> 1 libobjc.A.dylib
> 0x023685de objc_exception_throw + 47
> 2 CoreFoundation
> 0x0254958c -[__NSArrayI
> objectAtIndex:] + 236 3 Tasbeeh
> 0x00002922 -[ClassDuaTableCategory
> tableView:cellForRowAtIndexPath:] +
> 553 4 UIKit
> 0x00326a3f
> -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:]
> + 619 5 UIKit 0x0031cad2
> -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:] + 75 6 UIKit
> 0x00331337
> -[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:] + 1348 7 UIKit
> 0x003294bc -[UITableView
> layoutSubviews] + 242 8 QuartzCore
> 0x040e30d5 -[CALayer layoutSublayers]
> + 177 9 QuartzCore 0x040e2e05 CALayerLayoutIfNeeded + 220
> 10 QuartzCore
> 0x040e264c
> _ZN2CA7Context18commit_transactionEPNS_11TransactionE
> + 302 11 QuartzCore 0x040e22b0
> _ZN2CA11Transaction6commitEv + 292 12 QuartzCore
> 0x040e9f5b
> _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv
> + 99 13 CoreFoundation 0x02534d1b
> __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__
> + 27 14 CoreFoundation 0x024c9987 __CFRunLoopDoObservers +
> 295 15 CoreFoundation
> 0x02492c17 __CFRunLoopRun + 1575 16
> CoreFoundation
> 0x02492280 CFRunLoopRunSpecific + 208
> 17 CoreFoundation
> 0x024921a1 CFRunLoopRunInMode + 97 18
> GraphicsServices
> 0x02cb82c8 GSEventRunModal + 217 19
> GraphicsServices
> 0x02cb838d GSEventRun + 115 20 UIKit
> 0x002c4b58 UIApplicationMain + 1160
> 21 Tasbeeh
> 0x00002024 main + 102 22 Tasbeeh
> 0x00001fb5 start + 53 ) terminate
> called after throwing an instance of
> 'NSException' Program received signal:
> “SIGABRT”.
Please suggest me.
请建议我。
Thank you.
谢谢你。
采纳答案by suprandr
Is it possible that indexPath goes to a value that points to an invalid index of the array arrayDuaGroups
?
indexPath 是否有可能指向一个指向数组无效索引的值arrayDuaGroups
?
回答by KD Wu
Please check the nib file of your tableview controller.
请检查您的 tableview 控制器的 nib 文件。
There should be a "table view" under your view controller.
您的视图控制器下应该有一个“表格视图”。
Click to see the attribute inspector of the table view.
单击以查看表视图的属性检查器。
Check the "content" to see if it is assigned "Dynamic Prototypes" or "static cell"?
检查“内容”以查看它是否被分配了“动态原型”或“静态单元格”?
Change from "static cell" to "Dynamic Prototypes" might be able to solve your problem.
从“静态单元”更改为“动态原型”或许可以解决您的问题。
回答by Radu
Try commenting the cell = nil if and let only the cell = part , if it's what i think it is it will fix it
尝试评论 cell = nil if 并且只让 cell = part ,如果它是我认为它会修复它
// if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
// }
EDIT: AFTER viewing the log - The problem is with the array as data source, when it tries to rebuild the cell it does not find anything in your array(arrayDuaGroups), it is empty , declare your array in the class interface with the retain property and check to se if the arrayDuaGroups is empty
编辑:查看日志后 - 问题在于数组作为数据源,当它尝试重建单元格时,它在你的数组(arrayDuaGroups)中找不到任何东西,它是空的,在类接口中用保留声明你的数组属性并检查 arrayDuaGroups 是否为空
回答by Rahul Vyas
It seems array out of bounds exception. Your array is the problem. you should not allocate array into cellForRowAtIndexPath method. Fill the data in viewDidLoad method and then use that array to display data in cell.
似乎数组越界异常。你的数组是问题所在。您不应该将数组分配到 cellForRowAtIndexPath 方法中。在 viewDidLoad 方法中填充数据,然后使用该数组在单元格中显示数据。
回答by Jhaliya
Try with using below
尝试使用下面
NSString *CellIdentifier = [NSString stringWithFormat:@"Cell_%d_%d",indexPath.section,indexPath.row];
EDITED:
You have issue with NSArray
, You are trying to access an element from the array which doesn't exist,
你有问题NSArray
,你试图从不存在的数组中访问一个元素,
Your arrayDuaGroups
array does'nt have any object at index indexPath.section
.
您的arrayDuaGroups
数组在 index 处没有任何对象indexPath.section
。
Check the arrayDuaGroups
array content and length before fetching the object.
arrayDuaGroups
在获取对象之前检查数组内容和长度。
[arrayDuaGroups objectAtIndex:indexPath.section]
[arrayDuaGroups objectAtIndex:indexPath.section]