2014-10-29 93 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將出現空白/空。