Ошибка при обращении к AppDelegate - PullRequest
0 голосов
/ 23 марта 2011

В моем проекте есть приложение-делегат и три контроллера вида.В моем делегате приложения есть переменная (NSMutable Array), к которой я хочу получить доступ из своих контроллеров представления.Поэтому я решил создать указатель на мой делегат приложения и получить доступ к переменным.Вот мой код:

iSolveMathAppDelegate.h

#import <UIKit/UIKit.h>

@interface iSolveMathAppDelegate : NSObject <UIApplicationDelegate> {

    UIWindow *window;
    UITabBarController *tabBarController;
    NSMutableArray *tmpArray;
    }


@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) NSMutableArray *tmpArray; // variable I want to access
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;

@end

iSolveMathAppDelegate.m

#import "iSolveMathAppDelegate.h"


@implementation iSolveMathAppDelegate

@synthesize window;
@synthesize tabBarController;
@synthesize tmpArray;
...
- (void)dealloc {
    [tabBarController release];
    [window release];
    [tmpArray release];
    [super dealloc];
}


@end

Класс контроллера представления, из которого я хочу получить доступ к tmpArray.

referenceViewController.h

#import <UIKit/UIKit.h>

@class iSolveMathAppDelegate;

@interface referenceViewController : UITableViewController {
    NSMutableArray *equationTypes;
    iSolveMathAppDelegate *data;

}

@property(nonatomic, retain) NSMutableArray *equationTypes;
@property(nonatomic, retain) iSolveMathAppDelegate *data;

@end

И, наконец, referenceViewController.m

#import "referenceViewController.h"


    @implementation referenceViewController
    @synthesize equationTypes, data;

     data = (iSolveMathAppDelegate *)[[UIApplication sharedApplication] delegate]; 
//says that initializer element is not constant...ERROR!




        - (void)viewDidLoad {
            [super viewDidLoad];

        NSString *path = [[NSBundle mainBundle] pathForResource:@"equationTemplates"ofType:@"plist"];
        data.tmpArray = [[NSMutableArray alloc] initWithContentsOfFile:path];
        self.equationTypes = data.tmpArray;
  [data.tmpArray release]; // obviously none of these work, as data is not set.

    }


    - (void)dealloc {
        [super dealloc];
        [equationTypes release];
        [data release];
    }


    @end

Так или иначе, в строке data = (iSolveMathAppDelegate *)[[UIApplication sharedApplication] delegate]; компилятор говорит, что элемент инициализатора не является константой.

Я выделилСеть для ответов, и для всех это, кажется, работает ... но не игра в кости для меня :( Можете ли вы дать мне совет, где я ошибся? Я использую XCode 3.2 и iOS SDK 3 .... может быть, SDKпроблема.

Спасибо

Ответы [ 2 ]

2 голосов
/ 23 марта 2011

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

Вы должны поместить присваивание data в метод.Хорошее место было бы -viewDidLoad:

- (void)viewDidLoad {
    [super viewDidLoad];

    data = (iSolveMathAppDelegate *)[[UIApplication sharedApplication] delegate]; 

    ...
}
0 голосов
/ 23 марта 2011

Я понял, что такое структура и проблема объединения.Все, что мне нужно было сделать, это изменить @class iSolveAppDelegate на #import "iSolveAppDelegate.h" в моем файле referenceViewController.h.Спасибо Джонатан за помощь!

...