0

CoreDataをタブバーアプリに組み込んだところ、CoreData関数が機能しています(つまり、CoreDataからコンソールに情報を出力できます)。問題は、タブバーが機能していないことです。アプリを実行すると、次のようになります。

ここに画像の説明を入力してください

タブバー自体が表示されているように見えますが、アイテムがなく、テーブルビューが表示されていません。私のストーリーボードは次のようになります。

ここに画像の説明を入力してください

これが私の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;
}

ビューコントローラは次のとおりです。

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;
}
4

1 に答える 1

1

これはコアデータとは何の関係もありません。

ストーリーボード以外のプロジェクトにアプリデリゲートテンプレートのコードを使用していますが、ストーリーボードを使用しています。didFinishLaunchingメソッドのコードは、新しいウィンドウと空のタブバーコントローラーを作成します。これは、ストーリーボードのすべてをオーバーライドします。

self.window =を除いて、以降のすべてを削除しますreturn YES;。これはxibベースのアプリケーションで使用されるコードであり、ストーリーボードがある場合は必要ありません。

于 2012-05-09T05:57:06.453 に答える