tableview浏览器崩溃是什么原因因

IOS学习日志---1:TableView下拉刷新以及各种失败问题总结 - 推酷
IOS学习日志---1:TableView下拉刷新以及各种失败问题总结
& & & & & 今天尝试了下IOS中的下拉刷新,遇到各种各样的问题,写一篇日志做一个总结。
一、下拉刷新的实现 & & & & &
& & & & & &首先IOS是没有自带下拉刷新的,虽然我们平时遇到大量APP是具有下拉刷新功能,但是很不幸,IOS的确没有做下拉刷新。而我们平时看到的大部分下拉刷新都是采用第三方库:
EGORefreshTableHeaderView
& & & & & &下载地址为:
& & & & & &和大部分第三方库一样,zip展开后其中带有一个demo和一个库文件夹,如果要详细了解,建议先看看demo。其实这个第三方的用法也相当简单:
& & & & & &1. 将第三方库中的库文件夹拖到XCode中,并且选择拷贝。由于EGOTableViewPullRefresh依赖于IOS的QuartzCore.frameworks,所以别忘了加上。
& &2. 在你自己的TableViewController中import入
EGORefreshTableHeaderView.h
& &3. 在头文件中加入以下代码,其中reloadTableViewDataSource是在下拉松开后,会调用的代码,而doneLoadingTableViewData是刷新成功之后调用的代码,主要用于隐藏table上面的下拉区域。
EGORefreshTableHeaderView *_refreshHeaderV
-(void)reloadTableViewDataS
-(void)doneLoadingTableViewD
& & & & & &4. 在m文件中初始化下拉刷新:
//初始化下拉刷新
if(_refreshHeaderView ==nil){
EGORefreshTableHeaderView *view =[[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f - self.tableView.bounds.size.height, self.view.frame.size.width, self.tableView.bounds.size.height)];
view.delegate =
[self.tableView addSubview:view];
_refreshHeaderView =
update the last update date
[_refreshHeaderView refreshLastUpdatedDate];
& & & & & &5. 在m文件中实现以下方法:
#pragma mark Data Source Loading / Reloading Methods
-(void)reloadTableViewDataSource{
should be calling your tableviews data source model to reload
put here just for demo
_reloading =YES;
-(void)doneLoadingTableViewData{
model should call this when its done loading
_reloading =NO;
[_refreshHeaderView egoRefreshScrollViewDataSourceDidFinishedLoading:self.tableView];
#pragma mark -
#pragma mark UIScrollViewDelegate Methods
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
[_refreshHeaderView egoRefreshScrollViewDidScroll:scrollView];
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
[_refreshHeaderView egoRefreshScrollViewDidEndDragging:scrollView];
#pragma mark -
#pragma mark EGORefreshTableHeaderDelegate Methods
-(void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view{
[self reloadTableViewDataSource];
[self performSelector:@selector(doneLoadingTableViewData) withObject:nil afterDelay:3.0];
-(BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView*)view{
return _ // should return if data source model is reloading
-(NSDate*)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView*)view{
return [NSDate date]; // should return date data source was last changed
其中,我们可以看到,其实下拉刷新是触发了egoRefreshTableHeaderDidTriggerRefresh,而其中做了两件事情,一件是启动需要刷新的动作,这个需要用户我们定义完善reloadTableViewDataSource。第二件事情是设定3秒后调用doneLoadingTableViewData,当然我们可以在任何地方调用doneLoadingTableViewData来关闭下拉区域,这里是避免长时间无响应,约定一个最大时间。
(doneLoadingTableViewData可以连续多次调用,但是效果只有一次)
& & & & &此时你已经可以运行代码,会发现,已经成功地添加了一个下拉功能,当然,具体如何刷新,那是需要自己去维护。
二、下拉刷新失败的问题
& & & & 第一个可能失败的问题是,主线程与非主线程中刷新UI。一般来说IOS是不支持在非主线程中刷新UI的,会造成各种各样的问题导致程序崩溃。因此,如果下拉刷新是一个耗时操作,又是先分线程中进行的(比如发送HTTP Request向服务器发送请求获取数据,在数据成功返回后刷新UI),那么就需要将刷新过程放入一个函数,在分线程中调用
performSelectorOnMainThread
(refreshTable)
withObject
waitUntilDone
];告诉主线程如何刷新UI。其中,refreshTable为刷新函数。
& & 第二个问题,纠结了好久是有关自定义TableViewController中的cell刷新。用IB定义了cell的外观,并且为cell中的所有view都用tag标记。需要采用来刷新:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @&PrivateMessageCell&;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
// Configure the cell...
PrivateMessageListItem *item = (PrivateMessageListItem *)[privateMessageList objectAtIndex:indexPath.row];
//用户头像
UIImageView *objectProfileImage = (UIImageView *)[cell viewWithTag:1000];
[objectProfileImage setImageWithURL:[NSURL URLWithString: item.contacter_info.pic]];
其中千万别采用[self.view viewWithTag: 1000]来获取元素。这种方法能成功load数据,但是第二次刷新的时候就不会成功。
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
排版有问题
没有分页内容
视频无法显示
图片无法显示TableView编辑状态下跳转页面的崩溃处理
TableView编辑状态下跳转页面的崩溃处理
[摘要:29down votefavorite 12 I have a viewController with a UITableView , the rows of which I allow to edit (delete) with a swipe - much like in the Mail app. I do it with, among other, this method: - ( BOOL ) tableView :( UITableView *) tableVie]
29down votefavorite
I have a viewController with a&UITableView, the rows of which I allow to edit (delete) with a swipe - much like in the Mail app. I do it with, among other, this method:
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
However, if I have a delete button revealed, and at the same time I use back navigation of my&UINavigationController, i.e. when I&popViewControllerAnimated:, the app crashes with the following message:
[ViewController tableView:canEditRowAtIndexPath:]: message sent to deallocated instance 0xaae64d0
How can I resolve this problem?
up vote57down vote
In your view controller's&dealloc&method, set the table view's&editing&property to&NO.
shareeditflag
Guy Kogus3,96811023
up vote35down vote
I had the same problem, but I was using ARC and I didn't want to be mucking about in the dealloc method. Doing it in viewWillDisappear was sufficient to stop the crash.
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[table setEditing:NO];
shareeditflag
Nathan Rabe49026
感谢关注 Ithao123精品文库频道,是专门为互联网人打造的学习交流平台,全面满足互联网人工作与学习需求,更多互联网资讯尽在 IThao123!
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
产品设计是互联网产品经理的核心能力,一个好的产品经理一定在产品设计方面有扎实的功底,本专题将从互联网产品设计的几个方面谈谈产品设计
随着国内互联网的发展,产品经理岗位需求大幅增加,在国内,从事产品工作的大部分岗位为产品经理,其实现实中,很多从事产品工作的岗位是不能称为产品经理,主要原因是对产品经理的职责不明确,那产品经理的职责有哪些,本专题将详细介绍产品经理的主要职责
IThao123周刊[ios]此core data崩溃的可能原因是什么
首先,我很抱歉我想不出更好的标题这一问题。
这是不能重复自己,但对用户发生过很多次的崩溃。我使用 HockeyApp () 收集崩溃报告。所以我不能调试这个问题,我只能读取调用堆栈。但我没有读完之后有什么不对的线索。我省略了中间的几个不相关函数调用。
为 UI 的部分,我使用的 NSFetchedResultsController 来填充 UITableView 。
核心数据部分,我使用的 iOS 5 的新介绍了父-子聘书: 父邮电部为主要的队列中,儿童 MOC 读取队列的资源。在它读取的数据处理后保存 MOC 的孩子。尽快我救孩子邮电部、 所做的更改应该推入父 MOC 自动的核心数据和 FRC 应该看到所做的更改和更新通过其委托的表视图。我然后回叫主线程要做额外的用户界面更新。
具体来说,我可以理解如何 [UITableView indexPathForRowAtPoint:] 到称为 [NSFetchedResultsController objectAtIndexPath:] ,都看不出来为什么它终于叫到我的实体 initWithEntity:insertIntoManagedObjectContext: 和为什么 initWithEntity:insertIntoManagedObjectContext: 会导致未实现的故障。我觉得 [NSFetchedResultsController objectAtIndexPath:] 应该做 fetch ,但它是 insert 在这里。
Exception Type:
Exception Codes: #0 at 0x35e7e32c
Crashed Thread:
Application Specific Information:
*** Terminating app due to uncaught exception 'NSObjectInaccessibleException', reason: 'CoreData could not fulfill a fault for '0xe62bdc0 &x-coredata://327F5799-CAB1--0E87F0E19BF0/Status/p385&''
Last Exception Backtrace:
CoreFoundation
0x355c888f __exceptionPreprocess + 162
libobjc.A.dylib
0x objc_exception_throw + 32
0x35f124f3 _PFFaultHandlerLookupRow + 1098
0x35f11d5b _PF_FulfillDeferredFault + 194
0x35f11c0b _sharedIMPL_pvfk_core + 38
0x -[Tweet initWithEntity:insertIntoManagedObjectContext:] (Tweet.m:125)
0x0003fd1b -[Status initWithEntity:insertIntoManagedObjectContext:] (Status.m:333)
0x35f0eded -[NSManagedObject(_NSInternalMethods) _initWithEntity:withID:withHandler:withContext:] + 164
0x35f0de07 -[NSManagedObjectContext(_NSInternalAdditions) _retainedObjectWithID:optionalHandler:withInlineStorage:] + 134
0x35f6b6eb _PFRetainedObjectIDCore + 330
0x35f67065 -[NSManagedObjectContext objectWithID:] + 88
0x35f32c09 _faultBatchAtIndex + 1352
0x35f31e73 -[_PFBatchFaultingArray objectAtIndex:] + 42
0x35f30a87 -[_PFMutableProxyArray objectAtIndex:] + 82
0x35fdd81d -[NSFetchedResultsController objectAtIndexPath:] + 204
0x0009ebab -[TweetsViewController tableView:heightForRowAtIndexPath:] (TweetsViewController.m:581)
0x3304dab5 -[UISectionRowData refreshWithSection:tableView:tableViewRowData:] + 2548
0x33067c3b -[UITableViewRowData rectForSection:] + 302
0x -[UITableViewRowData indexPathsForRowsInRect:] + 136
0x -[UITableView indexPathsForRowsInRect:] + 52
0x -[UITableView indexPathForRowAtPoint:] + 28
0x -[TweetsViewController updateUI] (TweetsViewController.m:211)
0x00111a6f __block_global_1 (ResourceFetcher.m:68)
libdispatch.dylib
0x34458b87 _dispatch_barrier_sync_f_slow_invoke + 82
libdispatch.dylib
0x34457ee7 _dispatch_main_queue_callback_4CF$VARIANT$mp + 194
CoreFoundation
0x3559b2ad __CFRunLoopRun + 1268
CoreFoundation
0x CFRunLoopRunSpecific + 300
CoreFoundation
0x3551e36d CFRunLoopRunInMode + 104
GraphicsServices
0x371ba439 GSEventRunModal + 136
0x3302acd5 UIApplicationMain + 1080
0x000044ff main (main.m:16)
0x00003c50 start + 40
具有此崩溃的问题的用户通常看到的表视图将从完整的细胞变成空突然立即在飞机坠毁前。我认为它是上午重要提示但我不能想为什么所有数据突然都都不见任何理由 — — 我没有要移动或删除数据库文件的代码。
解决方法 1:
最后,我认为虽然不知道是否我的 bug 或核心数据 bug 更正了崩溃。
首先,它有瓜葛聘书之间同步。
第二,是的 initWithEntity:insertIntoManagedObjectContext: 时,他们是否是新创建或读取请求在 moc,第一次实例对象调用。所以它看起来医生具有误导性:
如果上下文不是零,此方法将调用 [上下文 insertObject:self] (其中造成 awakeFromInsert 来调用)。
如果调用它的取, awakeFromFetch 调用。
您可以看到在回溯,车祸发生在我重写 initWithEntity:insertIntoManagedObjectContext: 。合理足够, initWithEntity:insertIntoManagedObjectContext: 原来是失事的原因。但我不认为我做了什么坏事在它。我只用一些持久性属性来初始化一些非持久性属性:
- (id)initWithEntity:(NSEntityDescription *)entity insertIntoManagedObjectContext:(NSManagedObjectContext *)context {
self = [super initWithEntity:entity insertIntoManagedObjectContext:context];
if (self) {
// xxx_ is a persistent attribute while _xxx is the corresponding non-persistent attribute as its cache in memory only to reduce reading cost.
_xxx = self.xxx_.unsignedIntegerV
有时当我读到的第一个持久性属性引发 unfulfillable 异常。
我总是知道
你是劝阻重写此方法 — — 相反,则应重写 awakeFromInsert 和 awakeFromFetch (如果共同对这些方法的逻辑,它应当考虑到第三种方法,从两个调用)。如果您在此方法中执行自定义初始化,可能会导致出现问题撤消和重做操作。
但我不知道它会导致 unfulfillable 的例外情况。它是一个核心数据 bug 吗?否则,什么毛病我的代码?tableview崩溃是什么原因_百度知道
tableview崩溃是什么原因
提问者采纳
数据库可能出问题的环节特别多,不要着急。首先看你的描述,你的程序能读出数据库,应该从数据库到程序这条路是通的;穿常扁端壮得憋全铂户然后是tableview不显示,可能是sql语句有问题,或者是绑定到tableview有问题,你从这两个方面检查
其他类似问题
为您推荐:
table的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁UITableView删除的时候崩溃NSScanner:nil string argument-taidypanda
今天让这个崩溃整了一天,值得纪念一下
- (void)tableView:(UITableView&*)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath&*)indexPath
& &&if&(_segment.selectedSegmentIndex&==&0) {
& & & & [_allArray&removeObjectAtIndex:indexPath.row];
& &&[tableView&deleteRowsAtIndexPaths:@[indexPath]&withRowAnimation:UITableViewRowAnimationAutomatic];
}数据源_allArray是从后台获取的
是这样的:在tableview中删除一行的时候崩溃,什么 崩溃信息都没有,就是一句话,NSScanner:nil string argument,怎么找都没找出bug
后来灵光一闪,加了一句
&self.allArray&= [NSMutableArray&arrayWithArray:[dic&objectForKey:@&data&]];竟然解决了
怎么想都想不通,我定义的是可变的数组,从后台获取数据后赋值给self.array之后,他怎么会变成不可变的呢?bug是解决了,可问题没搞懂,以后还是注意点吧
很喜欢此文字

我要回帖

更多关于 tableview是什么 的文章

 

随机推荐