У меня есть проект на iPhone с iOS4.
Переменная экземпляра делегата приложения - это словарь с глобальными данными только для чтения, загруженными из plist при запуске приложения.
CalculatorAppDelegate.h
#import <UIKit/UIKit.h>
@class MainViewController;
@interface CalculatorAppDelegate : NSObject <UIApplicationDelegate> {
NSDictionary *RGBSpacesDictionary;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain, readonly) NSDictionary *RGBSpacesDictionary;
@property (nonatomic, retain) IBOutlet MainViewController *mainViewController;
@end
CalculatorAppDelegate.m
#import "CalculatorAppDelegate.h"
#import "MainViewController.h"
@implementation CalculatorAppDelegate
@synthesize mainViewController=_mainViewController;
@synthesize RGBSpacesDictionary;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// load plist
NSString* plistPath1 = [[NSBundle mainBundle] pathForResource:@"RGBSpaces" ofType:@"plist"];
RGBSpacesDictionary = [NSDictionary dictionaryWithContentsOfFile:plistPath1];
etc.
}
Тогда в MainViewController я могу успешно читать словарь в viewDidLoad
MainViewController.h
@class CalculatorAppDelegate;
@interface MainViewController : UIViewController <FlipsideViewControllerDelegate> {
CalculatorAppDelegate *appDelegate;
}
@property (nonatomic, retain) CalculatorAppDelegate *appDelegate;
etc.
}
MainViewCOntroller.m
#import "CalculatorAppDelegate.h"
@implementation MainViewController
@synthesize appDelegate;
- (void)viewDidLoad
{
[super viewDidLoad];
appDelegate = [[UIApplication sharedApplication] delegate];
RGBSpacesCount = (int) [appDelegate.RGBSpacesDictionary count];
}
В viewDidLoad все в порядке, я могу прочитать свой словарь как appDelegate.REGSpaceDictionary.
Проблема в другом методе MainVievController, вызываемом при нажатии кнопки
- (IBAction) RGBSpaceButtonPressed {
NSLog(@"appDelegate.RGBSpacesDictionary %@", appDelegate.RGBSpacesDictionary);
etc.
}
В это время вызов словаря (например, с помощью NSLog) возвращает в случае сбоя.
Может кто-нибудь мне помочь? Спасибо.