Приложение не отображает навигационный контроллер - PullRequest
0 голосов
/ 18 марта 2012

У меня есть приложение с базой данных sqlite3.В консоли я вижу, что приложение может читать данные с него, но я не могу вывести их на экран.Это просто белый экран, я не знаю почему.Вот мой код: файл AppDelegate:

#import <UIKit/UIKit.h>
@interface FailedBanksAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    UINavigationController *_navController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *navController;

@end

И .m часть:

#import "FailedBanksAppDelegate.h"
#import "FailedBankDatabase.h"
#import "FailedBankInfo.h"

@implementation FailedBanksAppDelegate

@synthesize navController = _navController;
@synthesize window = _window;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    NSArray *failedBankInfos = [FailedBankDatabase database].failedBankInfos;
    for (FailedBankInfo *info in failedBankInfos) 
    {
        NSLog(@"%d: %@, %@, %@", info.uniqueId, info.name, info.city, info.state);
    }


    [self.window  addSubview:_navController.view];
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}

- (void)dealloc {
    self.navController = nil;
}

@end

Я следую этому уроку, http://www.raywenderlich.com/913/sqlite-101-for-iphone-developers-making-our-app, и сделал именно то, что сделал автор, нопросто белый экран, даже без рядов!И да, я подключил розетки ..

В консоли я вижу это: 2012-03-18 11: 15: 56.186 Doctorina [3091: f803] 230: First Alliance Bank & Trust Co., Манчестер,NH 2012-03-18 11: 15: 56.186 Doctorina [3091: f803] 231: Национальный государственный банк метрополии, Метрополис, IL 2012-03-18 11: 15: 56.187 Doctorina [3091: f803] 232:

Прямо перед тем, как я написал это, я получил сообщение в консоли - приложение ожидало контроллер корневого представления, затем я изменил окно на self.window, и сообщение исчезло.Тем не менее это был белый экран ..

Я добавляю этот код, как вы сказали:

UITableViewController *rootController = [[UITableViewController alloc] initWithNibName:@"FailedBanksListViewController" bundle:nil];

    _navController = [[UINavigationController alloc] initWithRootViewController:rootController]; 

Но теперь он говорит - программа получает сообщение SIGABRT.

Таммои файлы FailedBanksListViewController:

.h файл:

#import <UIKit/UIKit.h>

@interface FailedBanksListViewController : UITableViewController {
    NSArray *_failedBankInfos;
}

@property (nonatomic, retain) NSArray *failedBankInfos;

@end

.m файл:

#import "FailedBanksListViewController.h"
#import "FailedBankDatabase.h"
#import "FailedBankInfo.h"


@implementation FailedBanksListViewController

@synthesize failedBankInfos = _failedBankInfos;


- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.failedBankInfos = [FailedBankDatabase database].failedBankInfos;
    self.title = @"Failed Banks";

}

- (void)viewDidUnload
{
    [super viewDidUnload];
}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 0;
}

- (NSInteger)tableView:(UITableView *)tableView 
 numberOfRowsInSection:(NSInteger)section
{
    return [_failedBankInfos count];
}


- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = 
    [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle 
                                       reuseIdentifier:CellIdentifier];
    }

    // Set up the cell...
    FailedBankInfo *info = [_failedBankInfos objectAtIndex:indexPath.row];
    cell.textLabel.text = info.name;
    cell.detailTextLabel.text = [NSString stringWithFormat:@"%@, %@", 
                                 info.city, info.state];

    return cell;
}

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Navigation logic may go here. Create and push another view controller.
    /*
     <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
     // ...
     // Pass the selected object to the new view controller.
     [self.navigationController pushViewController:detailViewController animated:YES];
     */
}

@end

Ответы [ 2 ]

1 голос
/ 18 марта 2012

Вы не инициализируете навигационный контроллер.

(...)
for (FailedBankInfo *info in failedBankInfos) 
{
    NSLog(@"%d: %@, %@, %@", info.uniqueId, info.name, info.city, info.state);
}
UIViewController *rootController = [[UIViewController alloc] initWithNibName:@"YourNibFile" bundle:nil];

_navController = [[UINavigationController alloc] initWithRootViewController:rootController];

[self.window  addSubview:_navController.view];
(...)
0 голосов
/ 07 мая 2013

вы инициализируете и назначаете навигационный контроллер до тех пор, пока эта часть не будет правильной ... но вы не добавили ни одного корневого контроллера представления в навигационный контроллер ... см. Код ниже

// Создание контроллера навигацииUINavigationController * nav = [[UINavigationController alloc] initWithRootViewController: self.viewControllerObj];

//Navigation controller is asssigned as RootView Controller
self.window.rootViewController=nav;

Убедитесь, что вы правильно распределили и инициализировали viewControllerObj

Затем в viewControlleO8

Вы можете легко перемещаться по другому приложению, используя следующий синтаксис.[self.navigationController pushViewController: vcObj1 animated: YES];

в vcObj1 вы можете вернуться к предыдущему представлению, используя

POpViewCOtnroller, метод self.navigationController.

Вы можете подумать, еслимы должны снова создать navigcotnroller в контроллере представления, чтобы выдвинуть другой контроллер представления ...

Нет self.navigationcotnroller означает, что экземпляр navigationcontroller, созданный вами в appdelegate ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...