7 berichten aan het bekijken - 1 tot 7 (van in totaal 7)
  • Q:
    Bijdrager
    Janozua

    [ObjC] UIViewCon. in UINavigationCon. in tabbar doorschuiven

    Ik ben Objective-C aan het leren en ik moet nu een UIViewController door laten schuiven in de UINavigationController die in een tabbar view zit. Het eerste item uit de tabbar heb ik een Navigation Controller gegeven, waarin een table view zit. In die table view heb ik mijn cells geplaatst en nu wil ik dat als je op een cell klikt dat de Navigation Controller de PageViewController er in doorschuift en dus het table view verdwijnt.
    Allemaal best logisch, dit is mijn code voor het doorschuiven:
    [code:1:e376c3ed9e]- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UIViewController *targetViewController = [[PageViewController alloc] initWithNibName:@"PageViewController" bundle:nil];
    [[self navigationController] pushViewController:targetViewController animated:YES];
    }[/code:1:e376c3ed9e]
    Opzich is zo ver ik weet niets mis mee, echter zegt de console dit wanneer ik op een cell klik (zijn overigens geen warnings of errors bij de code die ik net gaf):
    test
    [code:1:e376c3ed9e][Session started at 2009-03-05 20:40:24 +0100.]
    2009-03-05 20:40:24.819 iTN[1935:20b] *** Terminating app due to uncaught exception ‘NSInternalInconsistencyException’, reason: ‘-[UIViewController _loadViewFromNibNamed:bundle:] was unable to load a nib named "PageViewController"’
    2009-03-05 20:40:24.820 iTN[1935:20b] Stack: (
    2473357579,
    2416041531,
    2473357035,
    2473357098,
    816607229,
    816608011,
    816608381,
    816623737,
    816632945,
    816635263,
    816634297,
    15505,
    816379817,
    816409512,
    816216343,
    816148479,
    816144864,
    827743722,
    827753484,
    2472859125,
    2472860888,
    827745792,
    827745989,
    816114848,
    816160924
    )
    Loading program into debugger…
    GNU gdb 6.3.50-20050815 (Apple version gdb-962) (Sat Jul 26 08:14:40 UTC 2008)
    Copyright 2004 Free Software Foundation, Inc.
    GDB is free software, covered by the GNU General Public License, and you are
    welcome to change it and/or distribute copies of it under certain conditions.
    Type "show copying" to see the conditions.
    There is absolutely no warranty for GDB. Type "show warranty" for details.
    This GDB was configured as "i386-apple-darwin".warning: Unable to read symbols for "/System/Library/Frameworks/UIKit.framework/UIKit" (file not found).
    warning: Unable to read symbols from "UIKit" (not yet mapped into memory).
    warning: Unable to read symbols for "/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics" (file not found).
    warning: Unable to read symbols from "CoreGraphics" (not yet mapped into memory).
    Program loaded.
    sharedlibrary apply-load-rules all
    Attaching to program: `/Users/Jens/Library/Application Support/iPhone Simulator/User/Applications/99912CC2-76B8-425F-9C2E-3329E5205886/iTN.app/iTN’, process 1935.
    kill
    error while killing target (killing anyway): warning: error on line 1987 of "/SourceCache/gdb/gdb-962/src/gdb/macosx/macosx-nat-inferior.c" in function "macosx_kill_inferior_safe": (os/kern) failure (0x5x)
    quit

    The Debugger has exited with status 0.(gdb)[/code:1:e376c3ed9e]
    Wat kunnen oorzaken zijn dat hij PageViewController niet kan laden, en hoe geef ik precies de Navigation Controller aan aangezien ik die nergens in verwerkt heb.

    De classe waarin ik het probeer heeft het classetype UIViewController. Als ik de UINavigationController pak geeft hij geen errors, warnings of zegt iets in de console, maar doet hij verder ook niets als ik een cell aanklik.

    Ik ben nog maar net begonnen en heb tot nu toe al mijn andere problemen zelf al opgelost, maar hier kom ik niet zelf uit, al 2 dagen van alles geprobeerd…:P

    Als niet alles duidelijk is zeg je het maar.

    Alvast bedankt

    Bijdrager
    HerQ

    Je UITabBarController moet een instantie van een UINavigationController bevatten met je UITableViewController subclass als Root View Controller (-[UINavigationController initWithRootViewController:])

    Dan zou het moeten werken, maar als ik het zo eens lees heb je dit ook al. Aan je foutmelding te zien treed er echter een probleem op bij het laden van je nib file, dus daar zou ik eerst eens naar kijken. Misschien bestaat dit bestand niet of heb je ergens een typefout o.i.d. gemaakt.

    Bijdrager
    Janozua

    Ik heb alles nu in de UINavigationController gezet, nu komt er dus geen error, warning of log in de console. Maar als ik een item dus aanklik gebeurd er dus niets. Desondanks ik:
    [code:1:26e47598ab][[self navigationController] initWithRootViewController:tableViewController];[/code:1:26e47598ab]
    Plaats of juist niet.

    Bijdrager
    HerQ

    Ik denk toch dat ik iets meer code nodig heb om te kunnen inzien wat er aan de hand is.

    Wat je in de laatste post doet kan natuurlijk niet. Die rootViewController is alleen van toepassing bij het aanwijzen van de tabBarViewControllers, niet bij het pushen van een andere viewController.

    Je hebt dus je UITableViewController subclass. In je AppDelegate’s -applicationDidFinishLaunching: initialiseer je nu dus je tabBarViewControllers:
    [code:1:bccf595c39]
    UITabBarViewController *tabBarViewController = [[UITabBarViewController alloc] init];

    // Init table view controller with navigation wrapper
    UITableViewController *tableViewController = [[UITableViewControllerSubclass alloc] init];
    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:tableViewController];

    tabBarViewController.viewControllers = [NSArray arrayWithObjects:navigationController, nil];

    [self.view addSubview:tabBarViewController];

    // Probably done in -dealloc, except of the navigation controller ofcourse
    [tableViewController release];
    [navigationController release];
    [tabBarViewController release];
    [/code:1:bccf595c39]

    Je hebt dus nu alleen een subclass van UITableViewController nodig, in het voorbeeld heet deze UITableViewControllerSubclass. In deze subclass kun je nu dus je nieuwe UIViewController subclass pushen, op de manier hoe je dat in je startpost al hebt gedaan.

    Bijdrager
    Janozua

    Die functie in mijn AppDelegate ziet er heel simpel uit:
    [code:1:e1d84c6eff]- (void)applicationDidFinishLaunching:(UIApplication *)application {

    // Add the tab bar controller’s current view as a subview of the window
    [window addSubview:tabBarController.view];
    }[/code:1:e1d84c6eff]

    Verder heb ik alle controllers en objecten gewoon in de interface builder in elkaar gebouwd. Verder weet ik niet precies welke codes ik je het beste kan geven, want veel code werk aan dit ‘doorschuiven’ heb ik niet aangezien ik het niet goed begrijp. (ik ben zoals eerder gezegd nog beginner die aan het leren is door simpele applicaties te maken als deze). Als je msn o.i.d. hebt is het misschien wat makkelijker met bespreken welke codes je precies nodig hebt om te zien wat er aan de hand is?

    Edit: in exampjes met alleen navigation controller ziet het er ook heel gemakkelijk uit, alleen in combinatie wordt het een stuk lastiger zoals ik merk.

    Bijdrager
    mhrenes

    Als ik je goed begrijp (je eerste post) dan heb je een navigationcontroller als een van de views van een tabbarcontroller.
    Kennelijk functioneert dat allemaal anders kon je cell helemaal niet selecteren.
    Je code om een nieuwe viewController op de stack te krijgen is correct. De foutmelding is echter ook duidelijk, de NIB file die je PageViewController gebruikt om zijn view te initialiseren kan niet geladen worden.
    Kijk eens in je project of er wel een PageViewController.xib bestand bestaat.

    Als je alles handmatig zou willen initialiseren ( – (void)loadView ) dan moet je geen nibName meegeven (nil dus).

    Overigens, je gebruikte code genereert ook een memory-leak:
    – targetViewController wordt namelijk niet gereleased

    Bijdrager
    Janozua

    Inmiddels al opgelost door HerQ via msn.:)

7 berichten aan het bekijken - 1 tot 7 (van in totaal 7)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.