2012-05-09 5 views
0

J'ai travaillé CoreData dans mon application Tab Bar et les fonctions CoreData fonctionnent (c'est-à-dire que je peux en extraire des informations à la console). Le problème est que ma barre d'onglets ne fonctionne pas. Quand je lance mon application, il ressemble à ceci:Barre d'onglets apparaissant sans éléments

enter image description here

Il semble que la barre d'onglets est lui-même affiche pas, mais il n'y a pas d'éléments et il ne montre pas la vue du tableau. Mon story-board ressemble à ceci:

enter image description here

Voici le code pour mon AppDelegate:

AppDelegate.h

#import <UIKit/UIKit.h> 

#import "JobsViewController.h" 
#import "Job.h" 
#import "Shift.h" 

@interface AppDelegate : UIResponder <UIApplicationDelegate> 

@property (strong, nonatomic) UIWindow *window; 

@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext; 
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel; 
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator; 

- (void)saveContext; 
- (NSURL *)applicationDocumentsDirectory; 

@end 

AppDelegate.m

#import "AppDelegate.h" 

@implementation AppDelegate 

@synthesize window = _window; 
@synthesize managedObjectContext = __managedObjectContext; 
@synthesize managedObjectModel = __managedObjectModel; 
@synthesize persistentStoreCoordinator = __persistentStoreCoordinator; 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{  
    NSManagedObjectContext *context = [self managedObjectContext]; 
    Job *job = [NSEntityDescription insertNewObjectForEntityForName:@"Job" inManagedObjectContext:context]; 
    job.employer = @"Calder Centre"; 
    job.jobTitle = @"Addictions Counsellor"; 
    job.regularRate = 25.9f; 
    job.overtimeRate = 30.5f; 
    job.deduction1 = 0.1f; 
    job.deduction2 = 0.2f; 
    job.deduction3 = 0.3f; 
    job.deduction4 = 0.4f; 
    job.deduction1Name = @"CPP"; 
    job.deduction2Name = @"IT"; 
    job.deduction3Name = @"Union Dues"; 
    job.deduction4Name = @"Other"; 

    Shift *shift = [NSEntityDescription insertNewObjectForEntityForName:@"Shift" inManagedObjectContext:context]; 
    shift.startDate = [NSDate date]; 
    shift.endDate = [NSDate date]; 

    NSError *error; 
    if (![context save:&error]) { 
     NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]); 
    } 

    // Test listing all FailedBankInfos from the store 
    NSFetchRequest *jobFetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *jobEntity = [NSEntityDescription entityForName:@"Job" inManagedObjectContext:context]; 
    [jobFetchRequest setEntity:jobEntity]; 
    NSArray *fetchedJobs = [context executeFetchRequest:jobFetchRequest error:&error]; 
    for (Job *job in fetchedJobs) { 
     NSLog(@"Employer: %@", job.employer); 
     NSLog(@"Title: %@", job.jobTitle); 
    } 

    NSFetchRequest *shiftFetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *shiftEntity = [NSEntityDescription entityForName:@"Shift" inManagedObjectContext:context]; 
    [shiftFetchRequest setEntity:shiftEntity]; 
    NSArray *fetchedShifts = [context executeFetchRequest:shiftFetchRequest error:&error]; 
    for (Shift *shift in fetchedShifts) { 
     NSLog(@"Start Date: %@", shift.startDate); 
     NSLog(@"End Date: %@", shift.endDate); 
    } 

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 

    UITabBarController *tabBarController = [[UITabBarController alloc]init]; 
    self.window.rootViewController = tabBarController; 

    self.window.backgroundColor = [UIColor whiteColor]; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

Voici le contrôleur de vue:

JobsViewController.h

#import <UIKit/UIKit.h> 
#import "Job.h" 
#import "Shift.h" 

@interface JobsViewController : UITableViewController 

@property (nonatomic, strong) NSManagedObjectContext* managedObjectContext; 
@property (nonatomic, strong) NSArray *listOfJobs; 

@end 

JobsViewController.m

#import "JobsViewController.h" 

@interface JobsViewController() 

@end 

@implementation JobsViewController 

@synthesize managedObjectContext, listOfJobs; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller. 
    self.navigationItem.rightBarButtonItem = self.editButtonItem; 

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription 
            entityForName:@"Job" inManagedObjectContext:managedObjectContext]; 
    [fetchRequest setEntity:entity]; 
    NSError *error; 
    self.listOfJobs = [managedObjectContext executeFetchRequest:fetchRequest error:&error]; 
    self.title = @"Jobs"; 
} 

#pragma mark - Table view data source 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    // Return the number of sections. 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    // Return the number of rows in the section. 
    return [listOfJobs count]; 
} 

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

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

    // Configure the cell... 
    Job *job = [listOfJobs objectAtIndex:indexPath.row]; 
    cell.textLabel.text = job.jobTitle; 
    cell.detailTextLabel.text = job.employer; 

    return cell; 
} 
+0

J'ai supprimé beaucoup de votre question car il y avait énormément de code non pertinent, j'espère que c'est OK. – jrturton

+0

Oui, c'est sûr. J'aurais dû faire ça. – Barks

Répondre

1

Cela n'a rien à voir avec les données de base.

Vous utilisez du code provenant d'un modèle de délégué d'application pour un projet non-storyboard, mais vous utilisez un storyboard. Le code de votre méthode didFinishLaunching crée une nouvelle fenêtre et un contrôleur de barre d'onglets vide, qui remplace tout ce qui se trouve dans votre storyboard. Se débarrasser de tout après self.window =, sauf return YES;. Ce code est utilisé dans les applications basées sur xib et n'est pas nécessaire si vous avez un storyboard.

+0

Lol. Je savais que ça allait être quelque chose de simple mais je ne pensais pas que ça allait être quelque chose d'aussi simple. Merci :) – Barks

Questions connexes