2014-10-29 105 views
0

我有一个核心数据实体的老师,和我想表现出一个UIPickerView所有属性(名字,中间名,姓氏),所以我是把对象的详细数据:从核心数据使UIPickerView对象

- (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; 
    } 
从UIPickerDataSource

方法:

- (NSInteger)numberOfComponentsInPickerView: 
    (UIPickerView *)pickerView { 
    return 1; 
    } 
- (int)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { 
     return [teacherForSubjectArray count]; 
    } 

制作的NSMutableArray串,从NSManagedObjects的数组:

- (NSMutableArray *)makingDict { 

    int count = [teacherForSubjectArray count]; 
    teacherStringsArray = [NSMutableArray arrayWithCapacity:count]; 
    for (Teacher* object in teacherForSubjectArray) 
    { 
     teacher = [NSString stringWithFormat:@"%@ %@ %@", object.firstName, object.middleName, object.lastName]; 
     [teacherStringsArray addObject:teacher]; 
    } 
    NSLog(@"%@", teacherStringsArray); 
    return teacherStringsArray; 
} 

制作NSArray并显示它:

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ NSArray 
*array = [NSArray arrayWithArray:teacherStringsArray]; return [array objectAtIndex:row]; 
     } 

但没有任何东西会进入屏幕。有什么问题?也许有人知道更好的方法来做到这一点?

回答

0

您已经在您的teacherForSubjectArray中拥有教师对象,不需要方法makingDict或在titleForRow中创建新数组。你只需要在titleForRow老师对象中提取数据,

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ NSArray 
    Teacher *teacher = teacherForSubjectArray[row]; 
    NSString *teacherName = [NSString stringWithFormat:@"%@ %@ %@", teacher.firstName, teacher.middleName, teacher.lastName]; 
    return teacherName; 
} 

顺便说一句,你可以使用的代码,而不是三一行创建你的要求(我看到很多使用这些三行人,不知道为什么)。取而代之的是,

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

您可以使用此,

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Teacher"]; 
+0

我不知道为什么,但我试图做同样的,但它没有工作,所以我也这样,某种疯狂。谢谢你的解释,它有很大的帮助! – SpencerReid 2014-10-29 23:06:43

0

乍一看,您的代码看起来是准确的。

您是否检查过代码是否实际被调用?尝试在您的numberOfComponentsInPickerView:中添加NSLog语句以确保实际调用该方法。如果不是,那么您需要设置delegatedataSourceUIPickerView,以便它知道从哪里获取信息。

[myPickerView setDelegate:self]; 
[myPickerView setDataSource:self]; 

如果没有这些设置,然后委托方法将不会被调用,而UIPickerView将出现空白/空。