모든 스택 오버플로를 검색했지만 쉽게 대답 할 수는 없지만 실제로 문제가 해결되지 않았습니다.UIPickerView에 코어 데이터에서 가져온 데이터를 할당합니다.
문자열을 저장하는 엔티티가있는 앱이 있습니다. 나는 그것들을 저장하고 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] u로 인해 앱 종료 중 ncaught 예외 'NSInternalInconsistencyException'이유 '무효 인덱스 경로에 RECT 요청 (2 개 인덱스 [0, 0])' * * 우선 투사 호출 스택 : (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의 주석 부분을 실행할 때, 테스트의 목적을 위해 예외
을 던지는라고 종료 메서드 (코카 데이터에 대한 모든 주석), 그것은 잘 작동합니다. viewDidLoad에서 viewDidAppear의 코드를 삽입하면 viewController가 화면에 나타나는 순간 충돌이 발생합니다.
나는 진실에서 멀지는 않았지만 탈출구를 찾지 못했습니다. 누구도 저를 도와 줄 수 있습니까?
UIPicker보기의 대리자 메서드에 대한 경계를 유지할뿐만 아니라 할당 할 코어 데이터에서 어떤 값이 나오는지 먼저 확인하십시오. – iEinstein
시도하고 돌아올 것입니다 ... – lweingart
Ok, 다음으로 viewController로 바로 가면 UIPickerView 내가 얻었다 : 2013년 7월 23일 16 : 59 : 50.175 MemeGen [45,906을 : C07]리스트 엘리먼트 (엔티티 : LolText; ID : 0xc03bac0 ; 데이터 : )면, jQuery과 의해 다음 I 얻을 PickerView로 들어가 제 : 2013년 7월 23일 17 : 03 : 03.662 MemeGen [46,266 : C07]리스트 엘리먼트 < NSManagedObject : 0x1046f680> (엔티티 : LolText, ID : 0x1046e9c0 ; 데이터 : { text = "TEST LOLTEXT"; }) 여전히 충돌한다 –
lweingart