【问题标题】:get a value through a relationship in Core Data通过 Core Data 中的关系获取值
【发布时间】:2014-12-28 01:17:55
【问题描述】:

我有 2 个实体 - “Teacher”和“Subjects”,以及 2 个控制器,AddSubject 和 Subject manager。实体“主题”具有关系“老师”。在我的 AddSubjectController 中,我正在添加一个从 UIPickerView 选择老师的主题

Subjects *subject = [NSEntityDescription insertNewObjectForEntityForName:@"Subjects" inManagedObjectContext:self.managedObjectContext];
int selectedRow = [teacherPickerView selectedRowInComponent:0];


subject.name = nameOfSubjectTextField.text;
subject.article = notesTextView.text;
subject.teacher = [teacherForSubjectArray objectAtIndex:selectedRow];

teacherForSubjectArray 是一个包含 Core Data 对象的数组

- (NSArray *)takeTeacherForSubject {

    managedObjectContext = [AppDelegate sharedDelegate].managedObjectContext;

    NSFetchRequest *request = [[NSFetchRequest alloc]init];

    NSEntityDescription *description = [NSEntityDescription entityForName:@"Teacher" inManagedObjectContext:
                                        managedObjectContext];
    [request setEntity:description];

    NSError *requestError = nil;

    teacherForSubjectArray = [[self.managedObjectContext executeFetchRequest:request error:&requestError] mutableCopy];

    if (requestError) {
        NSLog(@"%@" , [requestError localizedDescription]);
    }
    return teacherForSubjectArray;

}

然后在我的 SubjectManager 中,我试图在 UITable 视图中显示这些数据,从之前的核心数据中获取它

- (NSArray *)takeSubjectFromCoreData {

    managedObjectContext = [AppDelegate sharedDelegate].managedObjectContext;
    NSFetchRequest *request = [[NSFetchRequest alloc]init];

    NSEntityDescription *description = [NSEntityDescription entityForName:@"Subjects" inManagedObjectContext:
                                            managedObjectContext];
    [request setEntity:description];

    NSError *requestError = nil;
    subjectsResultArray = [[self.managedObjectContext executeFetchRequest:request error:&requestError] mutableCopy];

    if (requestError) {
        NSLog(@"%@" , [requestError localizedDescription]);
    }

    NSLog(@"%@", subjectsResultArray);

    return subjectsResultArray;
}



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

    Subjects *objectSubject = [subjectsResultArray objectAtIndex:(long)indexPath.row];
    UITableViewCell *cell = [subjectsTableView dequeueReusableCellWithIdentifier:@"subjectCell" forIndexPath:indexPath];
    NSString *subjectName = [NSString stringWithFormat:@"%@", [objectSubject valueForKey:@"name"]];
    NSString *teacherOfSubject = [NSString stringWithFormat:@"%@", objectSubject.teacher];
    cell.textLabel.text = subjectName;
    cell.detailTextLabel.text = teacherOfSubject;

    return cell;
}

但是teacherOfSubject有一个问题,我得到的不是当前值,而是一个路径,或者NSmanagedObject而不是我需要的值,比如

0x7a6806d0 x-coredata://6DB0CDAF-5C8C-4128-BB43-D0EC10EA41D6/Teacher/p2。

我知道答案应该很简单,但我厌倦了自己尝试解决它。

【问题讨论】:

  • 如果我的问题不够清楚,请说出来。

标签: ios objective-c core-data entity-relationship


【解决方案1】:

这一行:

NSString *teacherOfSubject = [NSString stringWithFormat:@"%@", objectSubject.teacher];

为您提供主题的教师关系的字符串表示形式 - 即对对象的引用,而不是对特定属性的引用。您大概想要的是引用教师的某些属性,例如名称。假设您已经为两个实体创建了子类,您可以使用:

NSString *teacherOfSubject = [NSString stringWithFormat:@"%@", objectSubject.teacher.name];

如果没有,请使用:

NSManagedObject *teacher = [objectSubject valueForKey:@"teacher"];
NSString *teacherOfSubject = [NSString stringWithFormat:@"%@", [teacher valueForKey:@"name"];

显然修改 name 以匹配您希望使用的任何属性。

【讨论】:

  • 明白了。要获得名称,我需要执行 objectSubject.teacher.firstName(Teacher 实体中的那个属性)。谢谢。
猜你喜欢
  • 1970-01-01
  • 2013-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多