gpt4 book ai didi

iOS,reloadRowsAtIndexPaths - 在我将新对象添加到其数据源后崩溃

转载 作者:行者123 更新时间:2023-11-29 02:40:37 27 4
gpt4 key购买 nike

我有一个 UITableView,它的数据源通过调用 PHP 脚本得到更新,如果有任何数据要更新,响应会向数组添加一个新对象。如果通过 TimeStamp 添加了新项目,并且如果有新数据,那么新数据将在数组数据源中占据位置索引 0,但当我使用 reloadRowsAtIndexPath 时,该调用会在数据库表中进行检查,应用程序崩溃。我想这样做的原因是因为我不想刷新整个 UITableView 单元格,只保留现有数据并添加新数据而不影响现有单元格。现在单元格有一个延迟加载的图像,每次我添加新数据时,图像都会重新加载,并且在执行此操作时不会使应用程序看起来不错,所以这就是为什么我需要刷新传入的新数据。这就是我的方式使用此 reloadRowsAtIndexPaths:

-(void)renderLastTSPostInfo:(NSDictionary*)dic{


NSDictionary *posts = [dic objectForKey:@"posts"];

if((NSNull*)posts != [NSNull null]){
int counter = 1;
int p_ID;
int p_U_ID;
int p_T_ID;
NSString *p_Message;
NSDate *p_Created;
int p_Flagged;
int p_Rated;
NSString *firstNamePost;
NSString *lastNamePost;
NSString *p_userImage;

for(NSDictionary *dict in posts)
{
if((NSNull *)[dict objectForKey:@"P_ID"] != [NSNull null]){
p_ID = [[dict objectForKey:@"P_ID"] intValue];
}
if((NSNull *)[dict objectForKey:@"P_U_ID"] != [NSNull null]){
p_U_ID = [[dict objectForKey:@"P_U_ID"] intValue];
}
if((NSNull *)[dict objectForKey:@"P_T_ID"] != [NSNull null]){
p_T_ID = [[dict objectForKey:@"P_T_ID"] intValue];
}
if((NSNull *)[dict objectForKey:@"P_Message"] != [NSNull null]){
p_Message = [dict objectForKey:@"P_Message"];
}
if((NSNull *)[dict objectForKey:@"P_Created"] != [NSNull null]){
NSString *timestampString = [dict objectForKey:@"P_Created"];
double timestampDate = [timestampString doubleValue];
p_Created = [NSDate dateWithTimeIntervalSince1970:timestampDate];
}
if((NSNull *)[dict objectForKey:@"P_Flagged"] != [NSNull null]){
p_Flagged = [[dict objectForKey:@"P_Flagged"] intValue];
}
if((NSNull *)[dict objectForKey:@"P_Rated"] != [NSNull null]){
p_Rated = [[dict objectForKey:@"P_Rated"] intValue];
}
if((NSNull *)[dict objectForKey:@"U_FirstName"] != [NSNull null]){
firstNamePost = [dict objectForKey:@"U_FirstName"];
}
if((NSNull *)[dict objectForKey:@"U_LastName"] != [NSNull null]){
lastNamePost = [dict objectForKey:@"U_LastName"];
}
if((NSNull *)[dict objectForKey:@"U_Image"] != [NSNull null]){
p_userImage = [dict objectForKey:@"U_Image"];
}

PostInfo *postObj = [PostInfo new];
postObj.iD = p_ID;
postObj.userId = p_U_ID;
postObj.threadId = p_T_ID;
postObj.message = p_Message;
postObj.timeStampCreated = p_Created;
postObj.flagged = p_Flagged;
postObj.rated = p_Rated;
postObj.firstName = firstNamePost;
postObj.lastName = lastNamePost;
postObj.userImage = p_userImage;

[postsArray insertObject:postObj atIndex:0];

if(counter == posts.count){
postLastTimestamp = [dict objectForKey:@"P_Created"];
}

counter += 1;

}
[tableViewPosts beginUpdates];
[tableViewPosts reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationFade];
[tableViewPosts endUpdates];
//[tableViewPosts reloadData];
}



}

我得到的错误是:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0.  The number of rows contained in an existing section after the update (11) must be equal to the number of rows contained in that section before the update (10), plus or minus the number of rows inserted or deleted from that section (1 inserted, 1 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).'

最佳答案

当我遇到这个问题时,我过于频繁地重新加载 TableView ,并且项目尚未添加到集合中。我的解决方案是在 reloadData 之前调用layoutIfNeeded,并且此调用将等到绘制当前批处理之前再绘制当前批处理。

[tableViewPosts layoutIfNeeded];

关于iOS,reloadRowsAtIndexPaths - 在我将新对象添加到其数据源后崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25848209/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com