내 앱을 시작할 때 홈 뷰로 이동하고 NSUserDefaults에 저장된 기존 팔레트를 표시하지 않습니다. 그러나 '새 팔레트'버튼을 클릭하고 돌아 가면 새 팔레트와 기존 팔레트가 모두 표시됩니다. 이 밑바닥에 도달 할 수 없습니다. 어떤 도움을 주셔서 감사합니다.NSUserDefaults 데이터가 처음에 표시되지 않습니까?
응용 프로그램 delegate.h :
@interface palettesAppDelegate : NSObject <UIApplicationDelegate> {
NSMutableArray *colourPalettesContainer;
NSUserDefaults *prefs;
}
@property (assign, readwrite) NSUserDefaults *prefs;
@property (assign, readwrite) NSMutableArray *colourPalettesContainer;
@end
응용 프로그램 delegate.m :
#import "palettesAppDelegate.h"
@implementation palettesAppDelegate
@synthesize colourPalettesContainer, prefs;
- (void)dealloc {
[colourPalettesContainer release];
[super dealloc];
}
@end
Homeview.h :
#import <UIKit/UIKit.h>
#import "HandlingPalettes.h"
@interface HomeView : UIViewController {
HandlingPalettes *handlingPalettes;
}
@end
Homeview.m :
#import "HomeView.h"
#import <QuartzCore/QuartzCore.h>
@implementation HomeView
- (void)viewDidLoad {
[super viewDidLoad];
palettesAppDelegate *dataCenter = (palettesAppDelegate *)[[UIApplication sharedApplication] delegate];
dataCenter.prefs = [NSUserDefaults standardUserDefaults];
dataCenter.colourPalettesContainer = [dataCenter.prefs objectForKey:@"palettes"];
handlingPalettes = [[HandlingPalettes alloc] init];
[handlingPalettes newPalette];
}
-(void)viewWillAppear:(BOOL)animated {
NSLog(@"view will appear: %i", [dataCenter.colourPalettesContainer count]);
int numberOfExisting = [dataCenter.colourPalettesContainer count];
}
- (void)dealloc {
[handlingPalettes release];
[super dealloc];
}
@end
,
HandlingPalettes.h :
#import <UIKit/UIKit.h>
@interface HandlingPalettes : UIViewController {
}
-(void)newPalette;
@end
HandlingPalettes.m :
#import "HandlingPalettes.h"
#import "HomeView.h"
#import "palettesAppDelegate.h"
@implementation HandlingPalettes
-(void)newPalette {
palettesAppDelegate *dataCenter = (palettesAppDelegate *)[[UIApplication sharedApplication] delegate];
//If this is the first palette
if (dataCenter.colourPalettesContainer == nil) {
dataCenter.colourPalettesContainer = [[NSMutableArray alloc] init];
}
//Add a new palette
[dataCenter.colourPalettesContainer addObject:@"Test1", @"Test2", nil];
NSLog(@"Handling: %i", [dataCenter.colourPalettesContainer count]);
[dataCenter.prefs setObject:dataCenter.colourPalettesContainer forKey:@"palettes"];
[dataCenter.prefs synchronize];
}
- (void)dealloc {
[super dealloc];
}
@end
내가 누락되었거나 코드에서 언급하지 않은 NSUserDefaults입니까? –
'dataCenter.prefs = [NSUserDefaults standardUserDefaults]; '이 시점에서 dataCenter는 거의 사용되지 않습니다. 그러나 최종 추측을하기 위해 아직 많은 코드가 누락되어 있습니다. 그래서 처음이 아닌지 확인해 보겠습니다. –
fluchtpunkt가 맞을 것입니다. 특히 interface-builder-made 뷰에서 NIB로로드되는 경우에 특히 그렇습니다. 실제 응용 프로그램 대리자가 인스턴스화되기 전에 뷰를로드합니다. 일반적으로 응용 프로그램 위임을 "응용 프로그램의 중앙 데이터 원본"으로 사용하지 말고 대신 싱글 톤을 사용하는 것이 일반적입니다. – Kalle