2014-10-31 4 views
0

У меня есть 2 объекта - «Учитель» и «Субъекты» и 2 контроллера, AddSubject и Subject. Сущность «субъект» имеет отношение «учитель». В моем AddSubjectController я добавить тему с выбором учителя из UIPickerViewполучить значение через отношения в Core Data

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; 
} 

Но есть проблема с teache rOfSubject, я получаю не текущее значение, но путь, или NSmanagedObject вместо значения, что мне нужно, что-то вроде

0x7a6806d0 х-CoreData: // 6DB0CDAF-5C8C-4128-BB43-D0EC10EA41D6/Преподаватель/p2.

Я знаю, что ответ должен быть очень простым, но я устал пытаться решить его сам.

+0

если мой вопрос недостаточно ясный, скажите, пожалуйста. – SpencerReid

ответ

0

Эта линия:

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, чтобы соответствовать любой собственности, которую Вы хотите использовать.

+0

понимается. для получения имени мне нужно сделать objectSubject.teacher.firstName (атрибут thats в объекте Teacher). Спасибо. – SpencerReid

+0

Да, именно так. – pbasdf

Смежные вопросы