0
이 코드를 사용하여 plist에서 데이터를로드했습니다.iPhone : 변수 범위 문제
-(void)loadOrCreateData {
NSLog(@"Start loadOrCreateData");
NSString *filePath = [self dataFilePath];
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath])
{
NSLog(@"File Exists.. Loading from plist File");
NSArray *array = [[NSArray alloc] initWithContentsOfFile:filePath];
font = [array objectAtIndex:0];
background = (NSString *)[array objectAtIndex:1];
animation = [array objectAtIndex:5];
[array release];
NSLog(@"Loading Done!");
}
else
{
NSLog(@"File does not exist.. Creating new plist File");
font = @"Georgia-BoldItalic";
background = @"monalisa.jpeg";
animation = @"103";
[self saveData];
}
NSLog(@"Finish loadOrCreateData");
}
- (NSString *)dataFilePath {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
return [documentsDirectory stringByAppendingPathComponent:@"data.plist"];
}
- (void)saveData {
NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObject:font];
[array addObject:background];
[array addObject:animation];
[array writeToFile:[self dataFilePath] atomically:YES];
[array release];
}
데이터를 가져올 plist 파일이 없을 때 처음으로 모든 것이 잘로드됩니다. 하지만 두 번째로드에서 loadOrCreate
메서드 외부에서로드 된 데이터를 사용하려고하면 응용 프로그램이 충돌합니다. 어떤 이유로 인해 loadOrCreate
메소드 외부에서 액세스 할 때 글꼴, 배경 및 애니메이션의 데이터를 사용할 수 없습니다. 변수 - 글꼴, 배경 및 애니메이션은 .h
파일의 NSString으로 선언되므로 전역 적으로 사용할 수 있어야합니다. 이 이유가 뭔지 말해 줄 수 있니?
글꼴, 배경, 애니메이션 인스턴스 변수가있는 경우에, 당신이 (당신이 쓴 같은)의 dealloc에서 그들을 석방해야합니다. 정적 전역 변수 인 경우 해제하지 마십시오. – Max
고마워요. 그런데 왜 내가 이것을해야만 하는가? 죄송합니다, 임 아이폰 앱 개발에 새로운. –
첫 번째 경우 (배열에서 값을 가져 오는 경우) 할당 후에 배열을 해제합니다. 배열을 해제하면 배열도 해제됩니다. 그래서 당신은 그들을 지켜야합니다. 두 번째 경우에는 객체가 자동으로 릴리즈됩니다. – Max