【发布时间】:2011-07-25 00:48:28
【问题描述】:
我在 iOS4 的 iPhone 上有一个项目。
应用程序委托的实例变量是一个字典,其中包含在应用程序启动时从 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)返回崩溃。
有人可以帮助我吗?谢谢。
【问题讨论】:
-
崩溃的终端输出是什么?顺便说一句:对于全局数据,您应该使用持久存储或单例。
标签: iphone ios4 delegates global-variables