【问题标题】:Check if there is the same object in Core Data relationship检查Core Data关系中是否存在相同的对象
【发布时间】:2014-12-04 18:41:31
【问题描述】:

我有 2 种 NSManagedObject 子类——“Subject”和“TimeOfSchedule”。 Entity Subject 与 TimeOfSchedule 相关联

@property (nonatomic, retain) TimeOfSchedule *timeOfSubject;

在我的 TableView 中,我用数组中的时间填充单元格,我从核心数据中获取了这些数据

TimeOfSchedule *objectDate = [timesArray objectAtIndex:(long)indexPath.row];

但是如果有这样的 TimeOfSchedule 与 Subject 连接,或者 Subject 具有相同的对象关系,我想以另一种方式填充单元格。我怎样才能做这样的检查或验证?

【问题讨论】:

    标签: ios arrays uitableview core-data


    【解决方案1】:

    首先,从 Core Data 中获取来填充数组并不是一个好主意。您应该探索NSFetchedResultsController API 并改用它。

    其次,一旦您为表格视图单元格检索到对象,您就可以像在 Objective-C 中检查任何其他对象的存在一样简单地进行检查。

    if (objectDate.subject) {
      // dequeue cell for displaying subject
    }
    else {
      // dequeue cell for displaying only the date 
    }
    

    【讨论】:

    • 我同意 Mundi 的观点,我什至会说你现在最好重构,删除数组并直接与 Core Data 交谈。这就是它的用途。
    • @MarcusS.Zarra 为什么?制作一个数组并使用它非常容易
    • @user3224534 你在做同样的工作两次,一次是数据库,一次是你的数组。您在浪费 CPU 时间和内存,同时增加了错误的可能性。不聪明。
    【解决方案2】:

    如果您不想在加载时填充数组,您可以随时调用数据库以查看是否有任何对象与另一个对象相关。

    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Subject"];
            request.predicate = [NSPredicate predicateWithFormat:@"timeOfSubject == %@",objectDate];
    
            NSError *error;
            NSArray *matches = [self.managedObjectContext executeFetchRequest:request error:&error];
    
            if ([matches count]) { // Do Something;
            } else { // Do Something Else
            }
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多