Невозможно «передать данные» из UITableViewController в UIViewController - PullRequest
0 голосов
/ 14 марта 2012

У меня неприятности:)

Я не могу получить свой проект, потому что не могу передать данные из моего UITableView в DetailView (UIViewController)

Я новичок, поэтому, конечно, я делаю что-то не так, но я не знаю что. У меня есть несколько красных уроков, и, кажется, все в порядке ... но это не так!

Вот .h моего UITableViewController:

#import <Foundation/Foundation.h>

#import <UIKit/UIKit.h>
#import "XMLParser.h"
#import "ColzaDetailViewController.h"

@interface ColzaViewController : UITableViewController <XMLParserDelegate> 

{
    XMLParser *parser;
    NSDictionary *colzaInfos;
}

@property (nonatomic, retain) NSDictionary *colzaInfos;

@end

Я создал NSDictionary для хранения данных, которые мне нужно передать в detailView (ColzaDetailViewController)

Вот часть моего UITalbeViewController .h, которая интересует мою проблему:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    ColzaDetailViewController *detailViewController = [[ColzaDetailViewController alloc] initWithNibName:@"ColzaDetail" bundle:[NSBundle mainBundle]];

    colzaInfos = [parser.stories objectAtIndex:indexPath.row];

    detailViewController._colzaInfos = colzaInfos;

     [self.navigationController pushViewController:detailViewController animated:YES];

    NSLog(@"TEST MainView : %@", detailViewController._colzaInfos);

    detailViewController = nil;

}

Я думаю, что здесь все в порядке. Я поместил NSLog (TEST MainView), чтобы проверить, есть ли что-то в моем NSDictionary _colzaInfos.

Итак, вот мои .h и .m моего DetailVieuw (UIVIewController)

.h

#import <UIKit/UIKit.h>
#import "ColzaViewController.h"

@interface ColzaDetailViewController : UIViewController

{
    IBOutlet UILabel *colzaSettle;
    NSDictionary *_colzaInfos;
}

@property (nonatomic, strong) NSDictionary *_colzaInfos;
@property (nonatomic, retain) IBOutlet UILabel *colzaSettle;

@end

.m

#import "ColzaDetailViewController.h"

@implementation ColzaDetailViewController

@synthesize _colzaInfos, colzaSettle;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    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


// Implement loadView to create a view hierarchy programmatically, without using a nib.




// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
    [super viewDidLoad];

    colzaSettle = [_colzaInfos objectForKey:kCloture];

    NSLog(@"TEST DetailView : %@", _colzaInfos);
}


- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

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

@end

Как вы можете видеть в viewDidLoad, я поместил второй NSLog (TEST DetailView), чтобы еще раз проверить, есть ли что-то в моем Словаре

А вот и журнал:

2012-03-14 16:23:54.240 Mobile Settles[7173:f803] TEST DetailView : (null)
2012-03-14 16:23:54.241 Mobile Settles[7173:f803] TEST MainView : {
    date = "13/03/2012\n      ";
    echeance = "Ao\U00fbt 2012\n    ";
    settle = "453.25\n      ";
    variation = "5.75";
}

Итак, как вы можете видеть, журнал для DetailView равен NULL, но в MainView содержит данные.

Но мне нужно получить эти данные в DetailView для их отображения.

Единственное, что кажется мне странным на этом шаге, это то, что _colzaInfos Dictionary не выделяется и не инициализируется в любое время ... Но я пытаюсь выделить его и инициализировать в .m элемента detailViewController, но в моем журнале был в это время

TEST DetailView : {}

Кто-то может помочь мне понять, что я делаю неправильно.

(если вам нужна другая часть моего кода, чтобы что-то проверить ... не стесняйтесь спрашивать.)

Большое спасибо за помощь


Как вы сказали, я поставил строку кода в этом месте, пожалуйста, дайте мне знать, если я ошибаюсь. И, как я сказал в комментарии, когда я ставлю точку останова непосредственно в этой части кода и когда я запускаю программу, точка останова останавливает процесс ПОСЛЕ NSLog. И если я пытаюсь выделить / инициализировать его раньше, у меня ничего нет: TEST detailView: {}.

Извините, но это не работает: (

код:

@implementation ColzaDetailViewController

@synthesize _colzaInfos, colzaSettle;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) 
    {
        if (! _colzaInfos) 
            _colzaInfos = [[NSDictionary alloc] init];
    }

    return self;
}

1 Ответ

0 голосов
/ 14 марта 2012

Добавьте это к вашему initWithNibName методу в ColzaDetailViewController.m.

if (! _colzaInfos) _colzaInfos = [[NSDictionary alloc] init];

То же самое, если вы используете NSArray.Вы должны инициализировать переменную в какой-то момент, чтобы она могла хранить данные.Вы объявили это только в файле .h.

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