如何在 ios 中的单元格上显示核心数据?

Posted

技术标签:

【中文标题】如何在 ios 中的单元格上显示核心数据?【英文标题】:how to display core data on cell in ios? 【发布时间】:2016-01-19 07:21:21 【问题描述】:

在我的应用程序中,我想将数据存储在核心数据中,并且该数据应显示在 UITableView 的单元格上。

现在我已经成功地将数据存储在核心数据中了。

现在如何在UITableView的单元格上显示我的所有数据?

现在我已经编辑了一些 TasksViewController.m 代码

TasksViewController.h

@interface TasksViewController : UIViewController

@property (weak, nonatomic) IBOutlet UITableView *tableView;

@property (strong) NSMutableArray *tasks;

@property (nonatomic,retain) NSMutableArray *taskTaskNameArray,*taskColorTagArray,*taskProjectName,*taskStartingTimeArray,*taskCompletingTimeArray;

@property (strong, nonatomic) NSFetchedResultsController *fetchedResultsController;

@property (nonatomic, strong) NSManagedObjectContext *context;

@property (nonatomic,retain) NSFetchRequest *fetchRequest;

@end

TasksViewController.m

@implementation TasksViewController

- (void)viewDidLoad

    [super viewDidLoad];

    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Task"];

    fetchRequest.resultType = NSDictionaryResultType;

    [fetchRequest setPropertiesToFetch:[NSArray arrayWithObjects:@"task_name",@"color_tag",@"project_name",@"completing_date",@"starting_date",nil]];

    NSError *error = nil;
_arrayTasks = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];

    _taskTaskNameArray = [self.arrayTasks valueForKey:@"task_name"];
    _taskColorTagArray = [self.arrayTasks valueForKey:@"color_tag"];
    _taskProjectNameArray = [self.arrayTasks valueForKey:@"project_name"];
    _taskStartingTimeArray = [self.arrayTasks valueForKey:@"starting_date"];
    _taskCompletingTimeArray = [self.arrayTasks valueForKey:@"completing_date"];

   [self.tableView reloadData];


-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

    return 1;


-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    return _arrayTasks.count;


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    static NSString *CellIdentifier = @"Cell";

    TasksTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil)
    
        cell = [[TasksTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    

    cell.lblTaskName.text = [_arrayTask objectAtIndex:indexPath.row ];
    cell.lblColorTag.text = [_arrayTask objectAtIndex:indexPath.row];
    cell.lblProjectName.text = [_arrayTask objectAtIndex:indexPath.row];
    cell.lblCompletingDate.text = [_arrayTask objectAtIndex:indexPath.row];
    cell.lblStartingDate.text = [_arrayTask objectAtIndex:indexPath.row];

    return cell;

@end

任务.h

@interface Tasks : NSManagedObject

@property (nonatomic,retain) NSString *taskTaskName,*taskColorTag,*taskProjectName,*taskStartingDate,*taskCompletingDate;

@end

任务.m

@implementation Tasks

@dynamic taskTaskName;
@dynamic taskColorTag;
@dynamic taskProjectName;
@dynamic taskStartingDate;
@dynamic taskCompletingDate;

@end

TasksTableViewCell.h

@interface TasksTableViewCell : UITableViewCell

@property (weak, nonatomic) IBOutlet UILabel *lblTaskName;

@property (weak, nonatomic) IBOutlet UILabel *lblColorTag;

@property (weak, nonatomic) IBOutlet UILabel *lblProjectName;

@property (weak, nonatomic) IBOutlet UILabel *lblStartingTime;

@property (weak, nonatomic) IBOutlet UILabel *lblCompletingTime;

@end

TasksTableViewCell.m

@implementation TasksTableViewCell

- (void)awakeFromNib 
    // Initialization code


- (void)setSelected:(BOOL)selected animated:(BOOL)animated 
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state


@end

我试过这段代码,但它不工作,也没有在UITableView的单元格上显示数据。

我在 TasksTableViewController.m 的 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 中编辑了一些代码。

我将核心的数据存储在数组中,整个任务表存储在 arrayTask 中,它的属性也存储在不同的不同数组中,例如 _taskTaskNameArray 中的任务名等等......

感谢您的帮助。

【问题讨论】:

唯一的错误是在configurecell 函数中。将此Tasks *tasks = [self.fetchedResultsController objectAtIndexPath:indexPath]; 更改为Tasks *tasks = [self.tasks objectAtIndexPath:indexPath]; 完成但不工作@iphonic 您从未实际实例化 FRC,一旦创建,您需要在获取的结果控制器上调用 performFetch。这通常在返回之前在 getter 方法 fetchedResultsController 中完成。一旦你这样做了,@Justlike 在他的回答中指出的问题就会暴露出来。 抱歉,没听懂你在说什么@pbasdf 你从不给 _fetchedResultsController 赋值,所以它始终是 nil。即使在创建之后,您也需要使用perfromFetch 从存储中获取数据。现在不在我的 Mac 上,所以我手头没有示例代码,但我认为 Apple 的 NSFetchedResultsController 类参考有必要的代码。 【参考方案1】:

试试这个: 1. 像这样更新NSSortDescriptor:

NSSortDescriptor *taskNameDescriptor = [[NSSortDescriptor alloc]initWithKey:@"taskTaskName" ascending:YES];
NSSortDescriptor *subTaskDescriptor = [[NSSortDescriptor alloc]initWithKey:@"taskColorTag" ascending:YES];
NSSortDescriptor *startingDateDescriptor = [[NSSortDescriptor alloc]initWithKey:@"taskStartingDate" ascending:YES];
NSSortDescriptor *completingDateDescriptor = [[NSSortDescriptor alloc]initWithKey:@"taskCompletingDate" ascending:YES];
NSSortDescriptor *projectNameDescriptor = [[NSSortDescriptor alloc]initWithKey:@"taskProjectName" ascending:YES];
// ...

排序键应与属性名称相同。

    使用 dequeueReusableCellWithIdentifier:forIndexPath: 代替 dequeueReusableCellWithIdentifier:确保单元格不为零。

【讨论】:

【参考方案2】:

将数组更改为self.tasks 并将索引更改为indexpath.row

- (void)configureCell:(TasksTableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath

    // Configure the cell to show the book's title
    Tasks *tasks = [self.tasks objectAtIndexPath:indexPath.row];

    // YOUR CODE

谢谢。

【讨论】:

完成但不工作@MS 嘿@MS。我在 TaskViewController.m 中编辑了一些代码,但同样的问题 @ParagBharambe '_arrayTasks' 和其他的数组计数是多少? @ParagBharambe 'return cell' 丢失。你加了吗? Ya 的 count 数组是 Enitity 的 _arrayTask。而且我将所有属性存储在不同的数组中。

以上是关于如何在 ios 中的单元格上显示核心数据?的主要内容,如果未能解决你的问题,请参考以下文章

从 api 获取所有数据以及如何在 swift ios 中仅在单元格上附加标题

iOS 8 中的表格视图单元格自动布局

如何在ios中的特定collectionview单元格上应用手势识别器

如何在 ipad 中的 tableview 单元格上显示弹出框单击

如何在ios中的tableview单元格上的文本字段上返回文本字段上的键盘

iOS - 如何查看表格视图单元格上的“滑动删除”操作?