2010-07-18 6 views
1

나는 이것을 위해 예제/튜토리얼/정보를 찾는 데 어려움을 겪었습니다. 내 응용 프로그램에서 '즐겨 찾기에 추가'버튼을 갖고 싶습니다. 이것은 하나의 tableview에서 셀을 가져 와서 그 셀을 '즐겨 찾기'tableview에 채 웁니다. 핵심 데이터가 이것에 접근하기위한 올바른 방향인가? nsmutablearray 및/또는 nsuserdefaults 사용에 대한 몇 가지 힌트를 보았습니다. 어떤 방법으로 가야할지 확실하지 않습니다. 모든 조언을 부탁드립니다.'즐겨 찾기에 추가'버튼의 핵심 데이터는 무엇입니까?

답변

2

사용자 세션에서 영구 저장소가 필요한 경우 코어 데이터가 가장 좋은 방법입니다. NSUserDefaults는 사용자 기본값 인 그 이상입니다. NSUserDefaults에서 사용자의 홈 페이지를 저장하는 것이 적절할 것이라고 생각하지만 큰 (좋아하는 것처럼) 얻을 수있는 데이터는 아마도 데이터 저장소에 있어야합니다.

목록을 검색 할 필요가없고 저장하고 표시하려면 plist 파일도 확인하십시오. NSArray는 writeToFile:atomically:을 사용하여 plist 파일에 직접 데이터를 쓸 수 있습니다. 이 데이터는 arrayWithContentsOfFile:으로 다시 가져올 수 있습니다.

위의 방법을 사용하면 - arrayWithContentsOfFile:에주의해야합니다. 정적 메서드인데 인스턴스 메서드가 아닙니다.

코어 데이터는 훨씬 더 유연한 옵션입니다. "핵심 데이터 사용"과 함께 "탐색 기반 응용 프로그램"을 XCode에서 템플릿 응용 프로그램을 사용해보십시오. 예제 코드의 대부분은 바로 거기에 있습니다.

+0

Coolbeans. 조언 해주셔서 감사합니다! 나는 핵심 데이터에 대해 확실히 잠복 할 것입니다. – Chunjai

4

세부 뷰에이 기능을 추가했습니다. 내 엔티티에는 "즐겨 찾기"속성이 있습니다. 상세보기에서 "좋아"버튼을 누르면 좋아하는 속성의 캐릭터 라인을 설정하고 켜고 스타 이미지를 전환 : 그럼 다시 내 기본 테이블보기에서

- (IBAction)flagButtonPressed:(id)sender { 

    if (flagButtonSelected == 0) { 

     [flagButton setSelected:YES]; 

     flagButtonSelected = 1; 
     [flagButtonImage setImage:[UIImage imageNamed:@"yesFavorite.png"]]; 
     [myCoolEntity setValue:@"yesFlag" forKey:@"flagSet"]; 

    } else { 

     [flagButton setSelected:NO]; 

     flagButtonSelected = 0; 
     [flagButtonImage setImage:[UIImage imageNamed:@"noFavorite.png"]]; 
     [myCoolEntity setValue:@"noFlag" forKey:@"flagSet"]; 
    } 

    NSManagedObjectContext *context = myCoolEntity.managedObjectContext; 
    NSError *error = nil; 
    if (![context save:&error]) { 

     NSLog(@"Tried to save fav. Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 
    } 

} 

, 나는 탐색 모음에서 즐겨 찾기 버튼이 이는 NSFetchedResultsController와 "flagSet"속성이 "yesFlag"로 설정된 모든 엔티티를 찾는 조건자를 사용하여 새 뷰 컨트롤러를 푸시합니다.

- (NSFetchedResultsController *)fetchedResultsController { 
    // Set up the fetched results controller if needed. 
    if (fetchedResultsController == nil) { 
     // Create the fetch request for the entity. 
     NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
     // Edit the entity name as appropriate. 
     NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyCoolEntity" inManagedObjectContext:managedObjectContext]; 
     [fetchRequest setEntity:entity]; 

     NSPredicate *predicate = [NSPredicate predicateWithFormat: @"flagSet like 'yesFlag'"];  

     [fetchRequest setPredicate:predicate]; 

     //set batch size 
     [fetchRequest setFetchBatchSize:20]; 

     // Edit the sort key as appropriate. 
     NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; 
     NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 

     [fetchRequest setSortDescriptors:sortDescriptors]; 

     // Edit the section name key path and cache name if appropriate. 
     // nil for section name key path means "no sections". 
     NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"name" cacheName:nil]; 
     aFetchedResultsController.delegate = self; 
     self.fetchedResultsController = aFetchedResultsController; 

     [aFetchedResultsController release]; 
     [fetchRequest release]; 
     [sortDescriptor release]; 
     [sortDescriptors release]; 
    } 

    return fetchedResultsController; 
} 

또한,있는 viewDidLoad에서 상세보기를 내가 적절하게 즐겨 찾기 버튼의 스타 이미지를 표시 :

//flag button 
    if ([myCoolEntity.flagSet isEqual:@"yesFlag"]) { 

     [flagButtonImage setImage:[UIImage imageNamed:@"yesFavorite.png"]]; 
     [flagButton setSelected:YES]; 
     flagButtonSelected = 1; 

    } else { 

     [flagButtonImage setImage:[UIImage imageNamed:@"noFavorite.png"]]; 
     [flagButton setSelected:NO]; 
     flagButtonSelected = 0; 
    } 
+0

이것은 제가 한 일에 대해 생각한 것입니다.이 훌륭한 예를 들어 주셔서 감사합니다. – ingenspor

0

즐겨 찾기의 수는 관리가 남아있을 가능성이있는 경우 (최대 100 -에 말 200 정도)라면 NSUserDefaults 접근 방식을 사용하는 것이 좋습니다. 이 경우 다른 요구 사항이있는 경우에만 핵심 데이터를 사용하도록 제안합니다. 핵심 데이터를 사용하는 것은 간단하지 않습니다. 별도의 plist에 데이터를 저장하는 것도 좋은 방법입니다.

핵심 데이터에서 사용자를 놀라게하지 마십시오. 훌륭한 자료이며, 배우는 것이 좋습니다.하지만이 시나리오에 사용하면 엔지니어링이 과도해질 수 있습니다.