如何在 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中的特定collectionview单元格上应用手势识别器
如何在 ipad 中的 tableview 单元格上显示弹出框单击