2013-06-23 64 views
0

自学iOS编程,从this book开始。 我碰到错误的“属性'MainViewController'在'AppDelegate *'类型的对象上找不到'错误:对象'AppDelegate *'丢失属性

我有双重和三重检查,我正确地跟着代码,甚至从头开始重新编写。尝试了一些解决方案,但没有工作,很少正确地匹配我的问题。任何帮助吗?

AppDelegate.m(其中错误所在)

#import "AppDelegate.h" 
#import "WeatherForecast.h" 
#import "MainViewController.h" 

@implementation AppDelegate 

@synthesize managedObjectContext = _managedObjectContext; 
@synthesize managedObjectModel = _managedObjectModel; 
@synthesize persistentStoreCoordinator = _persistentStoreCoordinator; 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    WeatherForecast *forecast = [[WeatherForecast alloc] init]; 
    self.MainViewController.forecast = forecast; 
    // Override point for customization after application launch. 
    MainViewController *controller = (MainViewController *)self.window.rootViewController; 
    controller.managedObjectContext = self.managedObjectContext; 
    return YES; 
} 

MainViewController.h

#import "FlipsideViewController.h" 
#import "WeatherForecast.h" 

#import <CoreData/CoreData.h> 

@interface MainViewController : UIViewController <FlipsideViewControllerDelegate> 

- (IBAction)showInfo; 
- (IBAction)refreshView:(id) sender; 
- (void)updateView; 

@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext; 
@property (strong, nonatomic) WeatherForecast *forecast; 

@end 

回答

1

这个问题应该在你的第二行application:didFinishLaunchingWithOptionsself.MainViewController正在等待您的AppDelegate中的一个属性。只需删除此行并在return YES.之前添加controller.forecast = forecast;此时,您已获得对MainViewController的引用,并且可以安全地设置该属性(假设通过Storyboard或XIB将MainViewController设置为当前rootViewController)。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{  
    WeatherForecast *forecast = [[WeatherForecast alloc] init]; 
    // Override point for customization after application launch. 
    MainViewController *controller = (MainViewController *)self.window.rootViewController; 
    controller.managedObjectContext = self.managedObjectContext; 
    controller.forecast = forecast; 
    return YES; 
} 
+0

虽然这假定MainViewController是rootViewController,但我认为这是一个安全的假设。 – Abizern

+0

也意味着要增加这个假设,现在我相应地改进了答案。 – Karl