2014-03-20 1 views
0

Paul Hegarty의 코스에서 도우미 클래스를 사용하는 여러 CoreDataTableViewController가 있습니다. 이 모든 것을 제외하고는 모두 효과가 있으며 차이점을 볼 수 없습니다.CoreDataTableViewController가 segue에서 돌아올 때 다시로드되지 않습니다.

테이블이 처음 나타날 때 셀이 올바르게 선택되면 셀이 올바르게 채워지고 세그가 제대로 실행됩니다. 그러나 내가 뒤로 버튼을 누르면 테이블에 (null), (null)이 표시됩니다.

내가 생각할 수있는 [self useDocument]를 호출하는 모든 변형을 시도했지만 여전히 유용하지 않습니다. 이견있는 사람? 미리 감사드립니다.

// 
// TeamTableViewController.m 
// 

#import "TeamTableViewController.h" 
#import "iTrackAppDelegate.h" 
#import "CoreDataTableViewController.h" 
#import "SchoolRecords.h" 
#import "ScheduleViewController.h" 


@interface TeamTableViewController() 
@property NSInteger toggle; 

@end 

@implementation TeamTableViewController 

@synthesize iTrackContext = _iTrackContext; 
@synthesize schoolSelected = _schoolSelected; 

-(void) setSchoolSelected:(SchoolRecords *)schoolSelected 
{ 
    _schoolSelected = schoolSelected; 
} 

-(void) setITrackContext:(NSManagedObjectContext *)iTrackContext 
{ 
    if(_iTrackContext != iTrackContext){ 
     if (!iTrackContext) { 

      MyCoreDataHandler* cdh = 
      [(iTrackAppDelegate *) [[UIApplication sharedApplication] delegate] cdh]; 
      _iTrackContext = cdh.context; 
     } else { 
      _iTrackContext = iTrackContext; 
     } 
    } 

    [self useDocument]; 
} 


- (id)initWithStyle:(UITableViewStyle)style 
{ 
    self = [super initWithStyle:style]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 
- (void)setupFetchedResultsController // attaches an NSFetchRequest to this UITableViewController 
{ 
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SchoolRecords"]; 

    // no predicate because we want ALL the Athletes 
    request.sortDescriptors = [NSArray arrayWithObjects: 
           [NSSortDescriptor sortDescriptorWithKey:@"schoolName" ascending:YES], 
           nil]; 

    self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request 
                     managedObjectContext:self.iTrackContext 
                      sectionNameKeyPath:nil 
                        cacheName:nil]; 
    __block NSInteger myCount; 
    int64_t delayInSeconds = 5.0; 
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 

    [self.iTrackContext performBlock:^(void){NSError* requestError = nil; 
    myCount = [self.iTrackContext countForFetchRequest:request error:&requestError]; 
    NSLog(@"In %@ and count of iTrackContext = %lu", NSStringFromClass([self class]),(unsigned long)myCount); 
    }]; 

    if (!myCount || myCount == 0) { 
     [self displayAlertBoxWithTitle:@"No Teams" message:@"Have you added athletes yet? \nPlease go to Add Athletes" cancelButton:@"Okay"]; 
    } 
    }); 
} 


- (void)useDocument 
{ 

    if (self.iTrackContext) { 

     [self setupFetchedResultsController]; 

    } else { 
     NSString* errorText = @"A problem arose opening the search results database of Athletes."; 
     [self displayAlertBoxWithTitle:@"File Error" message:errorText cancelButton:@"Okay"]; 
    } 
} 

-(void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 


    if (!self.iTrackContext) { 

      MyCoreDataHandler* cdh = 
      [(iTrackAppDelegate *) [[UIApplication sharedApplication] delegate] cdh]; 
      [self setITrackContext:cdh.context]; 

    } else { 
     NSLog(@"In %@ of %@. Getting ready to call useDocument",NSStringFromSelector(_cmd), self.class); 

     [self useDocument]; 
    } 

} 


- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

#pragma mark - Table view data source 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    // If divide into sections use line below otherwise return 1. 
// return [[self.fetchedResultsController sections] count]; 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
// Do not really need this with only one section, but makes code usable if add sections later. 
    return [[[self.fetchedResultsController sections] objectAtIndex:section] numberOfObjects]; 

} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"teamInformation"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 


    SchoolRecords *schoolResults = [self.fetchedResultsController objectAtIndexPath:indexPath]; 

    NSString* titleText = schoolResults.schoolName; 

    cell.textLabel.text = titleText; 
    cell.detailTextLabel.text = [NSMutableString stringWithFormat:@"%@, %@", schoolResults.schoolCity, schoolResults.schoolState]; 

    return cell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

} 


# pragma navigation 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    NSIndexPath *indexPath = [self.tableView indexPathForCell:sender]; 
    [self setSchoolSelected:[self.fetchedResultsController objectAtIndexPath:indexPath]]; 

    // be somewhat generic here (slightly advanced usage) 
    // we'll segue to ANY view controller that has a photographer @property 

    if ([segue.identifier isEqualToString:@"scheduleDetailSegue"]) { 
     // use performSelector:withObject: to send without compiler checking 
     // (which is acceptable here because we used introspection to be sure this is okay) 

     NSLog(@"Preparing to passing school with schoolID = %@", self.schoolSelected.schoolID); 

     [segue.destinationViewController convenienceMethodForSettingSchool:self.schoolSelected]; 
    } 
} 



- (void) displayAlertBoxWithTitle:(NSString*)title message:(NSString*) myMessage cancelButton:(NSString*) cancelText 
{ 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title 
                message:myMessage 
                delegate:nil 
              cancelButtonTitle:cancelText 
              otherButtonTitles:nil]; 
    [alert show]; 
} 


@end 

답변

1

글쎄, 나는 그 문제가 무엇인지 확신 할 수 없다. StoryBoard에서 "불쾌한"TableViewController를 삭제하고 다시 만들었습니다. 그것은 트릭을했다. 되돌아 보면, 나는 tabviewController에서 잘못된 유형의 segue를 지정하지 않았는지 궁금합니다. 그러나 나는 그 가능성을 생각하기 전에 그것을 삭제했다.

관련 문제