0

アプリがロードされたときに、plist に設定した値に応じて 3 つの異なるビューからロードできるロジックをいくつか作成しました。

これは私のコードがどのように見えるかです

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    //sets context for coredata
    CoreDataController *coreDataController = [CoreDataController sharedManager];
    coreDataController.managedObjectContext = self.managedObjectContext;

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

    PrefsController *prefsController = [[PrefsController alloc] init];
    NSDictionary *prefsDictionary = [prefsController readPrefs];

    NSLog(@"%@", prefsDictionary);

    NSString *projectListBoolString = [prefsDictionary objectForKey:@"ProjectListAvailable"];
    NSString *installsBoolString = [prefsDictionary objectForKey:@"InstallsAvailable"];
    NSString *finishinBoolString = [prefsDictionary objectForKey:@"FinishingAvailable"];


    if (([projectListBoolString isEqualToString:@"T"]) && ([installsBoolString isEqualToString:@"F"]) && ([finishinBoolString isEqualToString:@"F"])) {
        self.getProjectListViewController = [[GetProjectListViewController alloc] initWithNibName:@"GetProjectListViewController" bundle:nil];
        self.window.rootViewController = self.getProjectListViewController;
        [self.window makeKeyAndVisible];
    }
    else if (([projectListBoolString isEqualToString:@"T"]) && ([installsBoolString isEqualToString:@"T"]) && ([finishinBoolString isEqualToString:@"T"])) {
        self.currentProjectListViewController = [[CurrentProjectListViewController alloc] initWithNibName:@"CurrentProjectListViewController" bundle:nil];
        self.window.rootViewController = self.currentProjectListViewController;
        [self.window makeKeyAndVisible];
    }
    else {
        self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
        self.window.rootViewController = self.viewController;
        [self.window makeKeyAndVisible];
    }

    return YES;
}

次に、UIViewControllers をロードおよびアンロードできるようにしたいと思います (ボタンを押してメモリから削除するなど)。

より理にかなっている場合は、ビューを静的または個別にしたいので、navigaiton ベースのコントローラーを使用したくありません。

誰かが新しい UIViewController をウィンドウにロードし、古い UIViewController を削除するコード例を見せてくれれば、大いに感謝します。

ただし、これを処理するのが正しいかどうか、またはコードがどのように見えるかさえわかりません。

どんな助けでも大歓迎です。

4

1 に答える 1

1

私にとって、このようにビューをロードするのは良い方法ではありません。AppDelegate に rootViewController をロードし、plist に応じて現在のビューを追加することをお勧めしますRootViewController

AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    RootViewController *rootViewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];
    self.window.rootViewController = rootViewController;
    [self.window makeKeyAndVisible];
    return YES;
}

RootViewControllerplist に応じて、現在のビューのサブビューを追加した後:

RootViewController.m

#pragma mark - View management
- (void)viewDidLoad
{
    [super viewDidLoad];

    NSDictionary *prefsDictionary = [prefsController readPrefs];

    NSLog(@"%@", prefsDictionary);

    NSString *projectListBoolString = [prefsDictionary objectForKey:@"ProjectListAvailable"];
    NSString *installsBoolString = [prefsDictionary objectForKey:@"InstallsAvailable"];
    NSString *finishinBoolString = [prefsDictionary objectForKey:@"FinishingAvailable"];

    if (([projectListBoolString isEqualToString:@"T"]) && ([installsBoolString isEqualToString:@"F"]) && ([finishinBoolString isEqualToString:@"F"])) {
        self.getProjectListViewController = [[GetProjectListViewController alloc] initWithNibName:@"GetProjectListViewController" bundle:nil];
        // Add View Controller
        [self.view addSubview:self.getProjectListViewController.view
    }
    else if (([projectListBoolString isEqualToString:@"T"]) && ([installsBoolString isEqualToString:@"T"]) && ([finishinBoolString isEqualToString:@"T"])) {
        self.currentProjectListViewController = [[CurrentProjectListViewController alloc] initWithNibName:@"CurrentProjectListViewController" bundle:nil];
        // Add View Controller
        [self.view addSubview:self.currentProjectListViewController.view];
    }
    else {
        self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
        // Add View Controller
        [self.view addSubview:self.viewController.view];
    }
}
于 2013-10-09T09:40:09.970 に答える