gpt4 book ai didi

ios - 获取对象并将其分类为多个部分

转载 作者:行者123 更新时间:2023-11-29 03:21:14 28 4
gpt4 key购买 nike

在我的 tableView 中,我有固定的部分和固定的部分标题。这是我的这部分要求的代码:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 6;
}


+ (NSString*) titleForHeaderForSection:(int) section
{
switch (section)
{
case 0 : return @"Overdue";
case 1 : return @"Today";
case 2 : return @"Tomorrow";
case 3 : return @"Upcoming";
case 4 : return @"Someday";
case 5 : return @"Completed";
//default : return [NSString stringWithFormat:@"Section no. %i",section + 1];
}
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
return [CollapsableTableViewViewController titleForHeaderForSection:section];
}

这部分工作正常,但现在我想用核心数据对象填充这些部分。对于这部分,在获取结果之前,我有以下代码:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSError *error = nil;
if (![[self fetchedResultsController] performFetch:&error])
{
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}


switch (section)
{
case 2 : return 3;
case 3 : return 30;
default : return 3;
}
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}

// Configure the cell.

switch (indexPath.row)
{
case 0 : cell.textLabel.text = @"First Cell"; break;
case 1 : cell.textLabel.text = @"Second Cell"; break;
case 2 : cell.textLabel.text = @"Third Cell"; break;
case 3 : cell.textLabel.text = @"Fourth Cell"; break;
case 4 : cell.textLabel.text = @"Fifth Cell"; break;
case 5 : cell.textLabel.text = @"Sixth Cell"; break;
case 6 : cell.textLabel.text = @"Seventh Cell"; break;
case 7 : cell.textLabel.text = @"Eighth Cell"; break;
default : cell.textLabel.text = [NSString stringWithFormat:@"Cell %i",indexPath.row + 1];
}

//cell.detailTextLabel.text = ...;

return cell;
}

这在填充部分方面也很有效...但我真正的要求是使用核心数据实体中的对象填充部分。这意味着,我必须替换这些行:

switch (section)
{
case 2 : return 3;
case 3 : return 30;
default : return 3;
}

与其他代码行一起获取各节中的实际行数。以及以下代码行:

switch (indexPath.row)
{
case 0 : cell.textLabel.text = @"First Cell"; break;
case 1 : cell.textLabel.text = @"Second Cell"; break;
case 2 : cell.textLabel.text = @"Third Cell"; break;
case 3 : cell.textLabel.text = @"Fourth Cell"; break;
case 4 : cell.textLabel.text = @"Fifth Cell"; break;
case 5 : cell.textLabel.text = @"Sixth Cell"; break;
case 6 : cell.textLabel.text = @"Seventh Cell"; break;
case 7 : cell.textLabel.text = @"Eighth Cell"; break;
default : cell.textLabel.text = [NSString stringWithFormat:@"Cell %i",indexPath.row + 1];
}

用其他代码行替换来调用真实对象的属性。

我已经在 y 项目中包含了所有核心数据堆栈以及 NSFetchedResultsController。核心数据实体有两个属性:tdText、tdDate。固定部分与 tdDate 属性相关。

最佳答案

在此代码示例中(除了来自 MartinR 的重要建议之外)您正在 -tableView: numberOfRowsInSection: 方法中获取数据。这是一笔难以置信的费用,而且绝对是错误的地方。该方法在您的应用程序的生命周期中被调用数百次甚至数千次,您不应该永远在那里执行提取。

其次,您在 NSFetchedResultsController 上调用 -performFetch: 一次。这通常在 -viewDidLoad 中进行,理想情况下只调用一次。从那里你可以向 NSFetchedResultsController 询问它的当前状态;你不再调用-performFetch:`。

至于其他。在继续前进之前,您需要退后一步,填补您对 Objective-C 和核心数据的知识空白。一些评价最高的人给了你很好的答案,但你没有充分利用它们。如果你继续沿着这条路走下去,人们就会停止帮助你。

在问另一个已经回答的问题之前,请充分利用所提供的建议。

关于ios - 获取对象并将其分类为多个部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21064864/

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