iPhone - Проблемы с доступом к переменным viewController от моего делегата - PullRequest
0 голосов
/ 27 июля 2011

Привет всем, это мой первый пост здесь, поэтому я постараюсь быть максимально ясным.

Итак, в моем проекте мне нужно получить документ XML из веб-сервиса с помощью SOAP изатем проанализируйте его в NSMutableArray (это сделано).Затем я хотел бы отобразить содержимое моей таблицы в виде таблицы.Проблема в том, что в моем делегате я не могу получить доступ ни к чему из моего viewController.

У меня есть 3 класса, SOAP_TestViewController, SOAP_TestAppDelegate и XMLParser.Я отправляю массив, содержащий проанализированный файл, из XMLParser в Appdelegate, а затем я хотел бы обновить массив в моем viewController, чтобы использовать его для обновления моего табличного представления.

Вот немного кода,может помочь понять.

#import "SOAP_TestAppDelegate.h"
#import "SOAP_TestViewController.h"
#import "XMLParser.h"

@implementation SOAP_TestAppDelegate

@synthesize window;
@synthesize viewController;


- (void)applicationDidFinishLaunching:(UIApplication *)application {        

[window addSubview:viewController.view];

NSLog(@"%@", viewController.donnees);  //Here I can get what I want.

[window makeKeyAndVisible]; 

}

-(void)afficher{

NSLog(@"%@", viewController.donnees);  //But there, it returns (null)...

[viewController reload];

}


- (void)dealloc {

[viewController release];

[window release];

[super dealloc];

}

@end

Я потратил несколько часов, чтобы найти решение.И я кое-что заметил.Как говорят комментарии в моем коде, я могу получить доступ к тому, что хочу, в функции applicationDidFinishLaunching, но не снаружи.Так я работаю над копиями или что-то, когда я вне этой функции?И что я должен сделать, чтобы получить доступ к моей таблице "donnees"?

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

(Пожалуйста, будьте снисходительныс моим английским :-) Я еще не говорю на двух языках ^^ ')

EDIT

Моя afficher функция вначале выглядела так.Я вызываю его из XMLParser с разобранным массивом в качестве параметра.Я был уверен, что это сработает, но ...

-(void) afficher:(NSMutableArray *)array
{
    NSLog(@"%@", array);  //returns the array sent by XMLParser.
    [viewController.donnees addObjectsFormArray:array];
    NSLog(@"%@", viewController.donnees);  //returns null.
}

Странно, как будто донны даже не были выделены и инициализированы ...

Ответы [ 3 ]

0 голосов
/ 27 июля 2011

Вы уверены, что ваш viewController не ноль? Хорошо, это маловероятно. Тогда вы уверены, что ваш массив donnees не ноль И это NSMutableArray, но не NSArray?

И, кстати, вы МОЖЕТЕ получить доступ к свойствам из appDelegate из любого места. Я не люблю это решение, но просто чтобы прояснить это. В любом классе вы можете сделать что-то вроде:

#include "YourAppDelegate.h"

- (void)someMethod {
    YourAppDelegate *yourDelegate = [[UIApplication sharedApplication] delegate];
    yourDelegate.donnees = self.anotherArray;
}

Конечно, donnees должно быть свойством в этом случае. Ура!

0 голосов
/ 27 июля 2011

см. Это:

-(void) rar:(NSMutableArray *)array
{
    NSLog(@"%@", array);  //returns the array sent by XMLParser.
    [viewController.donnees addObjectsFormArray:array];
    NSLog(@"%@", viewController.donnees);  //returns null.
}
0 голосов
/ 27 июля 2011

Я бы предложил установить точку останова, которая остановит программу при каждом изменении viewController ivar; Для этого:

  1. установить точку останова в appDelegate, а затем отладить программу;

  2. когда программа останавливается в вашем appDelegate, выполните эту команду в консоли gdb:

      (gdb) watch -location self->viewController
    
  3. продолжить отладку.

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

OLD:

Возможно, проблема связана с шагом, который вы описываете как «Я отправляю массив, содержащий проанализированный файл, из XMLParser в Appdelegate».

Действительно, кажется, что когда ваше приложение запускается, то есть до разбора, определяется viewController.donnees; после разбора он нулевой. Вы явно делаете что-то не так между ними.

Это может быть метод parserDidEndDocument, который пытается неверно установить donnees ivar. Без большего количества кода дальнейшая помощь невозможна, но я надеюсь, что этот совет поможет вам в правильном направлении.

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