【问题标题】:Add new entries to a table view controller at the top of the table with each new entry使用每个新条目将新条目添加到表格顶部的表格视图控制器
【发布时间】:2013-10-21 16:06:02
【问题描述】:

到目前为止,我有一个可以运行的应用程序,它基本上包含以下内容:

使用 Core Data,我有 1 个带有添加按钮的表视图控制器,它以模态方式调用一个新的视图控制器,提示用户将文本添加到三个字段中。当用户单击保存时,该条目将作为字幕单元格添加到表格视图控制器中,并填写了信息。效果很好。

我感到困惑并一直在寻找答案的是,每个新条目都会添加到单元格的底部,所以如果有足够的单元格填满屏幕,新添加的条目就会添加到底部。我真的很想将每个新条目放在表格视图单元格的顶部。

我已经实现了 Alphabetical sortDescriptors,它也可以工作,但说实话,我想在表格视图的顶部添加新条目,而不管起始字符如何。

我的 FetchRequest 目前看起来像这样:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Transaction"];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"whoBy.name" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];
fetchRequest.sortDescriptors = [NSArray arrayWithObject:sortDescriptor]; 

self.transactions = [[managedObjectContext executeFetchRequest:fetchRequest error:nil]mutableCopy];

这是将条目添加到数据库的代码:

NSManagedObject *person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:context];
[person setValue:self.nameTextField.text forKey:@"name"];

[transaction setValue:person forKey:@"whoBy"];

任何想法将不胜感激!

【问题讨论】:

    标签: ios core-data tableview nssortdescriptor


    【解决方案1】:

    你可以在地方插入新记录

     [self.tableview insertRowsAtIndexPaths:indexPath withRowAnimation:YES ];
    

    你也可以通过更新你的数组来完成。

    You can add object to as:
    
     [yourArray insertObject:object atIndex:0]; //for first row.
    

    然后用新数组重新加载表:

     [yourTable reloadData]
    

    这对你有用。

    【讨论】:

    • 谢谢 Pradhyuman - 这很有帮助。我会将该代码添加到哪种方法?此外,在 [yourArray insertObject 中,对象是 managedObjectContext 还是每一行的条目。抱歉,对此有点困惑!开发新手!
    • 你是在添加按钮点击右键调用新视图控制器?
    • 因此,您正在将视图添加为子视图,或者您正在调用 pushViewController 方法?
    • 我实际上并没有调用 pushViewController 方法。添加按钮被添加到情节提要中并在情节提要中(模态地)被添加,所以我有另一个视图控制器,它代表添加数据的模态视图控制器;这一切正常,我没有传递任何信息。从添加条目视图控制器,我将整个添加到 coredata 实体,然后从这个 TableView,我只是加载条目
    • 好的,然后在 viewWillAppear 方法中重新加载 UItableview 并从您的 coreData 实体中获取数据。
    【解决方案2】:

    您还可以在 Descending by Coredata 获取请求中获得答案。

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@"date" inManagedObjectContext:self.managedObjectContext];
    [fetchRequest setEntity:entityDesc];
    
    [fetchRequest setFetchBatchSize:10];
    
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES];
    NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil];    
    
    [fetchRequest setSortDescriptors:sortDescriptors];
    
    NSArray *fetchedObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
    

    【讨论】:

    • 您的核心数据实体是否有日期或时间戳字段?如果是,则使用此代码按您在实体中添加对象的降序获取对象,如果否,则可以添加时间戳字段。
    • 嘿伙计,感谢您的评论。我确实有一个可以使用的时间戳属性(字段)。根据时间戳,按照创建顺序显示的代码是什么样的?另外,我将如何将其放入部分(尚未使用 NSFetchedResultsController)。
    • 嘿使用上面相同的代码只是用你的时间戳字段更改实体名称日期
    • 谢谢伙计 - 跟着它,但它没有改变顺序。我的想法是因为我没有任何代码可以让“日期”属性实际执行任何操作?我会把这个放在哪里,我究竟会放什么?我没有要求用户输入任何日期,我只想使用 date 属性作为创建日期 - 所以它的创建日期..
    • 事实上,我其实很想修改它。我将为 UI 创建一个文本字段,以便用户可以选择一个日期(年、月等),我希望它成为搜索的基础。表格视图单元格不必显示日期,但我希望条目以这种方式排序..然后最终使用 sectins
    【解决方案3】:

    如果有人正在阅读此问题,我已将这个问题整理出来以供将来参考。

    在添加条目视图控制器(将条目添加到数据库并具有保存按钮方法的视图控制器)中,我执行了以下操作:

    1) 我在类中添加了一个属性 (@property (nonatomic, strong) NSDate *dateToday; 2)在保存方法中,我做了以下操作:

    self.dateToday = [NSDate date]; 
    [transaction setValue:self.dateToday forKey:@"createdDate"];
    // transaction is looking into the Transaction Entity which has an attribute called createdDate of type Date. 
    

    3) 在 TableViewController 和 NSFetchRequest 中,我执行了以下操作:

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"createdDate" ascending:NO]; 
    NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor]; 
    [fetchRequest setSortDescriptors:sortDescriptors];
    

    所以现在,当我创建一个新条目时,因为 Ascending 设置为 NO,新创建的条目位于 Table View Controller 的顶部。

    感谢您的指导@Pradhyuman Chavda

    【讨论】:

    • 不,兄弟,非常感谢您的帮助。真的帮助我进步了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    相关资源
    最近更新 更多