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比較陌生,所以請原諒我,如果我錯過了一些非常簡單的事情!
值得注意的是,在Objective-C中,在零實例上調用成員函數是完全正確的。實際上,這不好,但它不會崩潰或任何事情。 – zpasternack 2010-05-05 02:39:40
哦,不,我並不是想暗示它會崩潰,但是如果你確實想進入細節,ObjC運行時只會返回0/0.0/NULL/nil調用nil,因此,它到底是什麼在這裏發生 – 2010-05-05 16:18:27
添加init方法非常有用。謝謝。 – ryan 2010-05-05 17:20:29