2014-01-23 2 views
0

Stuck!managedObject를 XIB 내에서 tableview를 통해 보내기

안녕 얘들 아, 내가 Xib 내에서 tableview 이상 관리되는 개체를 이동하려고 노력하고있어 사용자가 더하기 버튼을 누르면 만들었습니다. "DeckID"라는 핵심 데이터를 사용하여 버튼을 채우고 싶습니다. 오랫동안 코딩하지 않았으므로 코어 데이터에 익숙하지 않습니다. 아마도 prepareforsegue를 사용하여 수행 할 수 있지만 확실하지 않습니다. 나는 잠시 동안 그것에 나의 두뇌를 쌓아왔다! 이 코드는 참조 용으로 포함되어 있습니다.

아무런 도움이 필요하지 않습니다. 당신이 당신의 뷰 컨트롤러의 NSManagedObjectContext *managedContext; 재산이있는 경우 "+" 버튼을 누를 때

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 

    if ([segue.identifier isEqualToString:@"viewCard"]) { 

     NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
     NSManagedObject *object = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
     NSString *deckID = [object valueForKey:@"deckID"]; 

     //Set the variable before it is declared! 
     AddCardVC *addC = segue.destinationViewController; 
     = [object valueForKey:@"deckID"]; 


    } 

    //The else is to ask the obvious statement; if it is not above, then be low. 
    else{ 

     viewAll *viewing = segue.destinationViewController; 
     viewing = segue.destinationViewController; 

    } 
} 

답변

0

는 새 뷰 컨트롤러로 관리되는 객체 참조를 보낼 수 있습니다.

- (IBAction)addCardButtonPressed:(UIButton *)sender { 
    // Get our managed object reference. 
    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *cardEntity = [NSEntityDescription entityForName:@"Card" inManagedObjectContext:self.managedContext]; 

    [request setEntity:cardEntity]; 

    NSError *error = nil; 
    NSArray *cards = [self.managedContext executeFetchRequest:request error:&error]; 

    // Prepare to manually transition when the back button is pressed. 
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil]; 

    // The @"AddCard" identifier is the Storyboard identifier found in Xcode's storyboard properties 
    AddCardVC * addC = (AddCardVC *)[storyboard instantiateViewControllerWithIdentifier:@"AddCard"]; 
      addC.cards = cards; 

    [self presentViewController:addCardVC animated:NO completion:nil]; 
} 

몇 가지주의 할 점이 있습니다.

  • 핵심 데이터에 Card이라는 엔티티가 있다고 가정합니다.
  • UINavigationController을 사용하고 있지 않다고 가정합니다. 당신이 빵 부스러기를 유지하려면 다시 이동 에 사용자 (이 일반적으로 권장), 당신은 내가 당신이보기 컨트롤러의 스토리 보드 ID에 "AddCard"을 설정 한 가정합니다 UINavigationController
  • 을 사용할 것 Xcode의 ID 검사기에서
  • UIButton "카드 추가"와보기 컨트롤러 사이에 IBAction을 설정했다고 가정합니다.
  • [self.managedContext executeFetchRequest];을 호출하면 배열이 반환됩니다. AddCardVC보기 컨트롤러에 머리글에 cards이라는 NSArray라는 공용 속성이 포함되어 있다고 가정합니다.

AddCardVC.h에는 카드 배열 또는 단일 카드 개체 속성이 있어야 위에서 설명한 것처럼 설정할 수 있습니다.

@interface AddCardVC : UIViewController 
@property (strong, nonatomic) NSArray *cards; 
@end 

주제 제목이 tableview를 통해 전송한다고 말하기 때문에 조금 혼란 스럽지만 사용자가 + 버튼을 누르면 어떻게하는지 묻습니다. 사용자가 셀을 누를 때 tableview와 관련된 관리 객체를 보내야하는 경우 대리인 메서드를 구현하여 관리 뷰를 구현할 수 있습니다.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil]; 

    AddCardVC *addCardVC = (AddCardVC *)[storyboard instantiateViewControllerWithIdentifier:@"AddCard"]; 
    addCardVC.cards = [self.managedObjectsArray objectAtIndex:indexPath.row]; 

    [self presentViewController:addCardVC animated:NO completion:nil]; 
} 

다시 말하지만, 사용자가 돌아가려면 탐색 경로를 제공하지 않습니다. 사용자가 이전 화면으로 돌아 가기를 원한다면 위에 설명한 것처럼 뒤로 버튼을 추가하고 코드를 직접 작성해야합니다.

예를 들어 UINavigationController를 사용하고 싶다면 알려주세요. 함께 넣을 수 있습니다.

+0

훌륭하고 매우 유용한 답변입니다. 매우 감사! 혼란에 대한 사과, 나는 viewAllCards 화면에서 추가 버튼을 클릭 할 때 활성화 된 뷰 내에서 tableview를 통해 데이터를 보내려고한다는 것을 의미합니다. XIB보기에 비교적 익숙하지 않기 때문에 다소 혼란 스럽습니다. – user3016288

+0

도움이 된 것을 기쁘게 생각합니다! 이 문제를 해결할 경우 응답으로 표시하십시오 :) –