我将CoreData应用到我的Tab Bar应用程序中并且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;
}
答案 0 :(得分:1)
这与核心数据无关。
您正在使用应用委托模板中的代码来处理非故事板项目,但您正在使用故事板。 didFinishLaunching方法中的代码是创建一个新窗口和空标签栏控制器,它会覆盖故事板中的任何内容。
除了self.window =
之外,摆脱return YES;
之后的所有内容。这是在基于xib的应用程序中使用的代码,如果您有故事板,则不需要。