2014-04-10 36 views
0

因此,這是我的問題。我試圖從CoreData獲取值,我的數據表中有數據,因此我不明白爲什麼會發生這種情況。當我打開託管UIPickerView的視圖時,不存在數據。UIPickerView未填充從CoreData獲取的數據

以下是我的代碼。

視圖控制器頭:

#import <UIKit/UIKit.h> 

@interface EBPaymentViewController : UIViewController <UIPickerViewDelegate> 

@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext; 
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel; 
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator; 

@property (nonatomic, strong) NSMutableArray *voucherTypes; 
@property (weak, nonatomic) IBOutlet UIPickerView *voucherTypePicker; 

@end 

下面,這裏是我的viewDidLoad

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 

    // load the data from the database and populate the UIPickerView. 
    EBAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 
    _managedObjectContext = [appDelegate managedObjectContext]; 

    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *vouchers 
     = [NSEntityDescription entityForName:@"VoucherTypes"  inManagedObjectContext:_managedObjectContext]; 

    [request setEntity:vouchers]; 

    NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"voucherType" ascending:YES]; 
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:descriptor, nil]; 
    [request setSortDescriptors:sortDescriptors]; 

    NSError *error = nil; 
    NSMutableArray *mutableFetchResults = [[_managedObjectContext executeFetchRequest:request error:&error] mutableCopy]; 

    if(mutableFetchResults == nil) 
    { 
    // handle error 
    } 

    [self setVoucherTypes:mutableFetchResults]; 

} 

最後我titleForRow:

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
    return [voucherTypes objectAtIndex:row]; 
} 

的UIPickerView就是空的。任何幫助,將不勝感激!

回答

2

你取你需要設置[myPicker setDataSource:self],然後從UIPickerDataSource協議實施方法後「[pickerView:numberOfRowsInComponent:]」

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { 
    return [voucherTypes count]; 
} 
+0

感謝您的幫助羅布,似乎工作。還有一個問題,如何設置UIPickerView來顯示數組中對象的voucherType屬性。 – user3498133

+0

很好用。要設置項目標籤,您的UIPickerViewDelegate可以實現pickerView:titleForRow:forComponent:並返回每行所需的任何屬性。在這種情況下,只需返回'voucherType [row]',我想;但你已經這樣做了嗎?你有沒有添加'[myPicker setDelegate:self]'?該代碼是否被執行?你在看什麼? – RobP

+0

'NSInvalidArgumentException'失敗,原因:' - [NSManagedObject copyWithZone:]:無法識別的選擇器發送到實例0x8ccbab0' – user3498133