我搜索了所有堆栈溢出,但是没有答案可以真正解决我的问题,尽管这似乎很简单。

我有一个带有存储字符串的实体的应用程序。我可以很好地存储它们并在UITableView中获取它们,但是在某些时候,我需要获取它们并将它们放入UIPickerView中。
这是我的课程,其中是UIPickerView。
因为它处于模​​式视图中,所以有一个委托可以将数据带回父视图中,但这很好。
头文件:

#import <UIKit/UIKit.h>


@protocol TextChoiceDelegate <NSObject>
- (void) takeBackViewController:(id)controller didFinishSelectingText:(NSString *)text;
@end

@interface ChooseTextViewController : UIViewController
<UIPickerViewDelegate, UIPickerViewDataSource> {
    UIPickerView *pickerView;
    NSMutableArray *list;
}

@property (nonatomic, assign) id <TextChoiceDelegate> delegate;
@property (strong, nonatomic) IBOutlet UIPickerView *pickerView;
@property (strong, nonatomic) NSString *text;

- (IBAction)didFinishChoosingText:(id)sender;

@end


和.m文件:

#import "ChooseTextViewController.h"

@interface ChooseTextViewController ()
@property (strong) NSMutableArray *list;
@end


@implementation ChooseTextViewController

@synthesize delegate;

@synthesize pickerView;
@synthesize list;
@synthesize text;


#pragma mark - IBActions

- (IBAction)didFinishChoosingText:(id)sender
{
    NSString *textToPassBack = text;
    NSLog(@"returning: %@", textToPassBack);
    [self.delegate takeBackViewController:self didFinishSelectingText:textToPassBack];

    [self dismissViewControllerAnimated:YES completion:NULL];
}

#pragma mark - UIPickerViewDataSource methods

// Number of components in the pickerView
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 1;
}

// Number of elements in the pickerView component
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent: (NSInteger)component
{
    return [self.list count];
}

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


#pragma mark - PickeView delegate methods

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    NSLog(@"Selection of element: %@", [self.list objectAtIndex:row]);
    text = [self.list objectAtIndex:row];
}


#pragma mark - View Controller LifeCycle

- (void)viewDidLoad
{
    [super viewDidLoad];
// Do any additional setup after loading the view.
    /*
    list = [[NSMutableArray alloc] init];
    [list addObject:@"1"];
    [list addObject:@"2"];
    [list addObject:@"3"];
    [list addObject:@"4"];
    [list addObject:@"5"];
     */
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    self.list = [[NSMutableArray alloc] init];

    NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"LolText"];

    self.list = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];
}


#pragma mark - Core Data Stack Methods

- (NSManagedObjectContext *)managedObjectContext
{
    NSManagedObjectContext *context = nil;
    id localDelegate = [[UIApplication sharedApplication] delegate];
    if ([localDelegate performSelector:@selector(managedObjectContext)]) {
        context = [localDelegate managedObjectContext];
    }
    return context;
}

@end


当我运行此程序时,pickerView会显示为空,一旦单击它,应用程序就会崩溃并显示以下错误日志:
2013-07-23 10:51:55.010 MemeGen [51428:c07] *-[UITableViewRowData rectForRow:inSection:],/ SourceCache / UIKit_Sim / UIKit-2380.17 / UITableViewRowData.m:1630中的断言失败
2013-07-23 10:51:55.012 MemeGen [51428:c07]由于未捕获的异常“ NSInternalInconsistencyException”而终止应用程序,原因:“在无效索引路径(2个索引[0,0])上请求rect”
**首先抛出调用堆栈:
(0x22bb012 0x16e5e7e 0x22bae78 0xe6b665 0x502f20 0x3c62de 0x756086 0x755f7a 0x37940d 0x37b9eb 0x5e485a 0x5e399b 0x5e50df 0x5e7d2d 0x5e7cac 0x5dfa28 0x34c972 0x34ce53 0x32ad4a 0x31c698 0x264fdf9 0x264fad0 0x2230bf5 0x2230962 0x2261bb6 0x2260f44 0x2260e1b 0x264e7e3 0x264e668 0x319ffc 0x27ad 0x26d5)
libc ++ abi.dylib:终止调用引发异常

出于测试目的,当我运行viewDidLoad方法的注释部分(对所有有关cora数据的注释)时,它工作正常。
如果我将viewDidAppear中的代码放入viewDidLoad中,则当viewController出现在屏幕上时崩溃

我跌倒了,好像我离真相并不遥远,但我找不到出路。
有人可以帮我吗?

最佳答案

这是因为Pickerview没有行,这就是系统崩溃的原因。

您可以检查列表是否提供数据?如果是这样,那应该没有问题。

检查是否没有数据,然后不要打开pickerview。

关于ios - 将提取的数据从核心数据分配给UIPickerView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17806154/

10-10 09:16
查看更多