코어 데이터와 행 구성에 데이터를 저장할 때 몇 가지 문제가 있습니다. 내 문제가 무엇인지 더 잘 이해하기 위해 내가 가지고있는 것을 설명 할 것입니다 :코어 데이터 행 삽입 및 문제 저장
메인 테이블 뷰가 동적 테이블과 함께 작동합니다.이 테이블 뷰에는 + 버튼이 있고, + 버튼을 누를 때마다 tableview가 popover 내에 나타납니다. 사용자가 메인 셀에 삽입 할 "셀 유형"을 선택할 수 있습니다. tableview. "셀 유형"은 맞춤 셀이며 하나의 클래스 및 xib 파일입니다. 각 사용자 정의 셀에는 다양한 텍스트 필드가 있습니다. 따라서 아이디어는 다음과 같습니다.
- 셀 유형을 선택하고 주 테이블 뷰에 삽입하십시오.
- 텍스트 필드에 데이터를 입력하십시오.
- 저장된 데이터는 삽입 된 행 수와 텍스트 필드의 데이터에 해당합니다.
팝 오버의의 tableview를 호출 할 때 난 내 주요의 tableview에서이 방법이 있습니다
- (IBAction)Add:(id)sender { SelectProduct *typeProduct=[[self.storyboard instantiateViewControllerWithIdentifier:@"selectTable"]initWithTableViewTag:self.tableView.tag]; self.popover=[[UIPopoverController alloc]initWithContentViewController:typeProduct]; [popover presentPopoverFromBarButtonItem:buttonAdd permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; typeProduct.popView = self.popover; typeProduct.cellSelected = self.cellSelected; //cellSelected is core data subclass. typeProduct.delegate = self; typeProduct.managedObjectContext = self.managedObjectContext; }
다음 내 팝 오버에있는 tableview의 내 didSelectRow에, 내가 가진 :
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
row = indexPath.row;
if (row == 0)
{
cellSelected=[NSEntityDescription insertNewObjectForEntityForName:@"CellSave" inManagedObjectContext:self.managedObjectContext];
cellSelected.nameCellData = @"Olive";
cellSelected.amountData = myCostumCell.amount.text;
}
을 여기에서 세포가 내 주요 tableview에 삽입됩니다, 여기 내 주요 tableview 관련 방법 :
- (void)viewDidLoad
{
[self.tableView registerNib:[UINib nibWithNibName:@"myCostumCellXib" bundle:nil] forCellReuseIdentifier:@"myCostumCell"];
AppDelegate *appDelegate =[[UIApplication sharedApplication] delegate];
self.managedObjectContext=[appDelegate managedObjectContext];
NSError *error = nil;
if (![self.fetchedResultsController performFetch:&error])
{
// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
[self fetchedResultsController];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"myCostumCell";
cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell.cellSelected = self.cellSelected;
cell.managedObjectContext = self.managedObjectContext;
if (cell == nil)
{
cell = [[MyCostumCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
cellSelected = [self.fetchedResultsController objectAtIndexPath:indexPath];
cell.nameCell.text = cellSelected.nameCellData;
if ([cellSelected.nameCellData isEqualToString:@"Olive"])
{
cell.amount.text = cellSelected.amountData;
// i have more textfields to assign but i think you understand the rest..
}
}
내 fetchedResultsController 방법 : 내가 메인의 tableview를 종료하고 내가 이해, 다른있는 tableview로 이동하려면 지금
- (NSFetchedResultsController *)fetchedResultsController
{
if (_fetchedResultsController != nil)
{
return _fetchedResultsController;
}
// Create and configure a fetch request.
NSFetchRequest *fetchRequestCellSave = [[NSFetchRequest alloc] init];
NSEntityDescription *entityCellSave=
[NSEntityDescription entityForName:@"CellSave" inManagedObjectContext:self.managedObjectContext];
[fetchRequestCellSave setEntity:entityCellSave];
// Create the sort descriptors array.
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"nameCellData" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequestCellSave setSortDescriptors:sortDescriptors];
_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequestCellSave managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"nameCellData" cacheName:nil];
_fetchedResultsController.delegate = self;
self.fetchedResultsController = _fetchedResultsController;
return _fetchedResultsController;
}
를 (또한 다른 사람을 가지고 있지만 그들은 표준 물건입니다) 내 managedObject에 텍스트 필드의 내용을 저장해야합니다.
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
cellSelected.amountData = cell.amount.text;
//i have more textfields to assign but for the example i think you understand
what i want.
[self.managedObjectContext save:nil];
}
여기에서 한 행은 "sa VED "또한 양의 텍스트 ...하지만 문제는 내가 한 번 더 행을 추가 할 때 시작 :
새 행 대신 이전 행이 삽입 후에의의의 tableview의 상단에 나타납니다 왜?
두 번째 행의 textField (amount)를 채울 때 ... tableview를 종료하고 돌아 오면 텍스트 필드가 채워진 것처럼 보이지 않습니다. 내가 뭘 잘못하고 있습니까? 내가 ... 하나를 삽입의 tableview를 종료 한 후 다시 와서 다른 행을 삽입 할 경우
이전 문제는 ... 텍스트 필드의 양이 ... 저장됩니다 내가 한 번에 두 행을 삽입하면 어떻게하지만
내 문제는 어디에 있습니까? 내 맞춤 셀 클래스에 있나요? 어디서? ... 긴 게시물에 대해 유감이지만, 이것은 나를 미치게 만든다.시간에 대한
감사
감사
안녕하세요 북두칠성, 첫째 날, 정말 미안 내 게시물에 응답 해 주셔서 감사하자 lost.So 당신이 말할 때 : "입력하자마자 데이터를 저장해야합니다"라고 말하면 텍스트입니까? 그래서 내 costum 셀 클래스의 textfieldDidEndEditing 메서드로 이동해야합니까? 또한 행을 삽입 할 때 저장해야합니까?. 또한 핵심 데이터와 함께 일하고있는 또 다른 tableview가 있고 데이터를 삽입하고 싶을 때 + 버튼을 누르고 모달 tableview (정적 셀)이 나타나면 텍스트를 삽입하고 올바르게 저장하지만 동적 표준을 사용하고 있습니다. 행과 모든 행은 항상 서로 아래로 이동합니다. – Japa
안녕하세요. 예, -textFieldDidEndEditing 또는 -shouldChangeCharactersInRange 대리자 메서드가 작동합니다. 행을 삽입 할 때 저장하는 것은 당신에게 달린 것입니다. 새 엔티티를 삽입하지만 유효하게 클래스를 만드십니까? 그렇게하면 저장하십시오. 텍스트가있을 때까지 유효하지 않으면 그때까지 저장하지 마십시오. – Wain
테이블의 행 순서는 반입 된 결과 컨트롤러에 제공된 정렬 설명 자에 의해 결정됩니다. – Wain