2013-05-19 2 views
1

RestKit을 사용하여 json 형식의 데이터를 서버에서 CoreData 엔터티로 가져 오는 IOS 앱이 있습니다. 엔티티의 일부 속성은 각 셀에 대한 이미지 및 제목이있는 콜렉션 뷰를 채우는데 도움이됩니다.컬렉션보기에서 상세보기로 이동할 때 CoreData를 활용하는 방법

셀을 선택하면 컬렉션보기에서 상세보기로 이동하려고합니다. 자세히보기에서 이미지와 함께 표시하려는 CoreData 엔티티의 "요약"속성이 있습니다.

나는 prepareForSegue 메서드를 통해 데이터를 전달할 수 있음을 알고 있습니다. 그러나 을 전달하려는 이미지 및 요약 데이터를 지정하는 방법을 모르겠습니다.

어쩌면 이미지와 요약을 전달하는 것이 적절한 방법이 아닙니까? managedObjectContext을 상세보기 컨트롤러에 전달하고 거기에서 결과를 가져와야합니까?

다음은 내 CollectionView의 채우기 방법입니다. 여기

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { 

static NSString *CellIdentifier = @"Cell"; 

MyNewsCollectionViewCell *cell = (MyNewsCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath]; 
NSManagedObject *object = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
NSURL *photoURL = [NSURL URLWithString:(NSString *) [object valueForKey:@"imageUrl"]]; 
NSData *photoData = [NSData dataWithContentsOfURL:photoURL]; 
[cell.cellimg setImage:[[UIImage alloc] initWithData:photoData]];   
[cell.title setText:[object valueForKey:@"title"]];  

return cell; 

어떤 도움이 많이 주시면 감사하겠습니다 .... 이것은 분명 초보자 질문입니다 prepareForSegue 방법

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"newsDetail"]) { 

     NewsDetailViewController *vc =[segue destinationViewController]; 
     vc.newsDetailImageView = //How do I designate the image from the cell I selected??? 
     vc.newsDetailText = //How do I designate the text from the cell I selected???    

    } 
} 

입니다. 내가 초보자 인 것을 감안할 때, 예제 코드가 실제로 도움이된다! 셀 선택이 즉시 SEGUE을 유발하는 경우

답변

0

, 당신은 UICollectionViewindexPathForSelectedItems 방법의 사용은 당신이 당신의 NSManagedObject를 얻기 위해 필요한 indexPath를 얻을 수 있습니다.

이 시도 :

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"newsDetail"]) { 
     NewsDetailViewController *vc =[segue destinationViewController]; 
     // In the following line, replace self.collectionView with your UICollectionView 
     NSIndexPath *indexPath = [[self.collectionView indexPathsForSelectedItems] objectAtIndex:0]; 

     NSManagedObject *object = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
     NSURL *photoURL = [NSURL URLWithString:(NSString *)[object valueForKey:@"imageUrl"]]; 
     NSData *photoData = [NSData dataWithContentsOfURL:photoURL]; 
     UIImage *img = [[UIImage alloc] initWithData:photoData]; 

     vc.newsDetailImageView = [[UIImageView alloc] initWithImage:img]; 
     vc.newsDetailText = howeverYouGetYourObjectSummary;    
    } 
} 
+0

감사합니다. Simon! 이 작품! 또한 Master-Detail 템플릿의 prepareForSegue 메서드에서 제공되는 코드가 작동하는 것을 발견했습니다. 내가 그 질문을하기 전에 왜 시도하지 않았는지 나는 모른다. 나는 이제 indexPathForSelectedItems 메서드를 사용하기 때문에 답을 더 잘 고맙게 생각합니다! 다시 한 번 감사드립니다! – Ben

0

당신은 너무 좋아, 당신 MyNewsCollectionViewCell에 속성을 추가 할 수 있습니다

@property (weak,nonatomic) NSManagedObject* myObject; 

는 그런 다음 cellForItemAtIndexPath이 셀이의 property NSManagedObject를 할당 할 수 있습니다.

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { 
     /* Add this line to All that u r already doing*/ 
     [cell setMyObject:object]; 
     return cell; 
    } 

지금 didSelectCellMethod 당신이 보낸 사람에서 개체를 얻을 prepareForSegue:에서 다음 [self performSegueWithIdentifier: @"MySegue" sender: cell];

및 호출 할 수 있습니다.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(MyNewsCollectionViewCell)sender 
      { 
       if ([[segue identifier] isEqualToString:@"newsDetail"]) { 
        NewsDetailViewController *vc =[segue destinationViewController]; 
        NSManagedObject* object = sender.myObject; 

        //use this object to set values of 

        vc.newsDetailImageView = /*set value*/ 
        vc.newsDetailText = /*set value*/    
       } 
     } 
+0

Ila, 답변 해 주셔서 감사합니다. 나는 Simons에 대한 답변을 먼저 얻을 수 있었지만 나는이 방법으로도 할 수 있다고 생각합니다. 나는 그것을 증명하지는 못했지만 논리적이며 질문에 대한 견고한 해결책으로 보인다. 감사! – Ben

관련 문제