2010-05-04 18 views
1

我似乎無法將數據保存到我的AppDelegate中的自定義實例對象。我的自定義類很簡單,如下:通過AppDelegate將數據保存在自定義類中

Person.h

... 
@interface Person : NSObject { 
    int _age; 
} 

- (void) setAge: (int) age; 
- (int) age; 
@end 

Person.m

#import "Person.h" 

@implementation Person 

- (void) setAge:(int) age { 
    _age = age; 
} 
- (int) age { 
    return _age; 
} 
@end 

然後我在AppDelegate類創建一個Person的實例:

AppDelegate.h

@class Person; 

@interface AccuTaxAppDelegate : NSObject <UIApplicationDelegate> { 
    ... 
Person *person; 
} 
... 
@property (nonatomic, retain) Person *person; 
@end 

AppDelegate.m

... 
#import "Person.h" 

@implementation AccuTaxAppDelegate 

... 
@synthesize person; 

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

    // Override point for customization after app launch  
    [window addSubview:[navigationController view]]; 
    [window makeKeyAndVisible]; 
} 

- (void)applicationWillTerminate:(UIApplication *)application { 
// Save data if appropriate 
} 

#pragma mark - 
#pragma mark Memory management 

- (void)dealloc { 
    [navigationController release]; 
    [window release]; 
    [person release]; 
    [super dealloc]; 
} 
@end 

最後,在我的ViewController代碼我搶的AppDelegate一個句柄,然後搶人的實例,但是當我試圖拯救時代它不似乎工作:

MyViewController

... 
- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
    NSString *textAge = [textField text]; 
    int age = [textAge intValue]; 
    NSLog(@"Age from text field::%i", age); 

    AppDelegate *appDelegate = 
     (AppDelegate *)[UIApplication sharedApplication].delegate; 

    Person *myPerson = (Person *)[appDelegate person]; 
    NSLog(@"Age before setting: %i", [myPerson age]); 
    [myPerson setAge:age]; 
    NSLog(@"Age after setting: %i", [myPerson age]); 

    [textAge release]; 
} 
... 

上述NSLogs的輸出是:

[Session started at 2010-05-04 18:29:22 +0100.] 
2010-05-04 18:29:28.260 AccuTax[16235:207] Age in text field:25 
2010-05-04 18:29:28.262 AccuTax[16235:207] Age before setting: 0 
2010-05-04 18:29:28.263 AccuTax[16235:207] Age after setting: 0 

爲什麼「時代」不被存儲任何想法?我對Obj-C比較陌生,所以請原諒我,如果我錯過了一些非常簡單的事情!

回答

3

看起來你從來沒有真正創造者的一個實例 - 在AccuTaxAppDelegate添加包含行

人= [[人頁頭] INIT]的init方法;

否則人無;

+0

值得注意的是,在Objective-C中,在零實例上調用成員函數是完全正確的。實際上,這不好,但它不會崩潰或任何事情。 – zpasternack 2010-05-05 02:39:40

+0

哦,不,我並不是想暗示它會崩潰,但是如果你確實想進入細節,ObjC運行時只會返回0/0.0/NULL/nil調用nil,因此,它到底是什麼在這裏發生 – 2010-05-05 16:18:27

+0

添加init方法非常有用。謝謝。 – ryan 2010-05-05 17:20:29

相關問題