Tôi đang xây dựng một ứng dụng lưu trữ hình ảnh trong thư mục Tài liệu của gói ứng dụng. Để đảm bảo rằng các thư mục tồn tại, tôi muốn kiểm tra xem chúng có tồn tại hay không và nếu chúng không tồn tại, hãy tạo chúng tại thời điểm bắt đầu ứng dụng.Làm cách nào để tránh EXC_BAD_ACCESS khi kiểm tra xem các thư mục có tồn tại không?
Hiện nay, tôi đang làm điều này trong didFinishLaunchingWithOptions:
như vậy:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSArray *directoriesToCreate = [[NSArray alloc] initWithObjects:
@"DirA/DirA1",
@"DirA/DirA2",
@"DirB/DirB2",
@"DirB/DirB2",
@"DirC",
nil];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];
for (NSString *directoryToCreate in directoriesToCreate) {
NSString *directoryPath = [documentsPath stringByAppendingPathComponent:directoryToCreate];
NSLog(directoryPath);
if (![[NSFileManager defaultManager] fileExistsAtPath:directoryPath isDirectory:YES]) {
NSError *directoryCreateError = nil;
[[NSFileManager defaultManager] createDirectoryAtPath:directoryPath
withIntermediateDirectories:YES
attributes:nil
error:&directoryCreateError];
}
}
[window addSubview:navigationController.view];
[window makeKeyAndVisible];
return YES;
}
Trên đường chạy trốn đầu tiên của ứng dụng - khi không ai trong số các thư mục tồn tại - ứng dụng chạy, các thư mục được tạo ra như mong đợi và mọi thứ chỉ chạy tốt.
Khi ứng dụng bị chấm dứt và chạy lại, tôi nhận được tín hiệu EXC_BAD_ACCESS trên cuộc gọi fileExistsAtPath:
trên [NSFileManager defaultManager]
.
Điều tôi không hiểu là lý do tại sao điều này chỉ chạy tốt khi các thư mục không tồn tại, nhưng nó sẽ sụp đổ khi chúng tồn tại.
Có ai có thể cung cấp bất kỳ trợ giúp nào không?
NSLog của bạn sẽ giống như, "NSLog (@"% @ ", anObject);'. Chỉ định 'NSLog (anObject);' hoạt động nếu * anObject * là một chuỗi, bởi vì chuỗi định dạng phải được đặt ở vị trí đó. Vì vậy, nó sẽ lấy * anObject * làm chuỗi định dạng. Nhưng nó sẽ sụp đổ nó là một số đối tượng khác hơn là một chuỗi. – EmptyStack
Cố gắng 'giữ lại' '' và 'đối tượng documentsPath' và' release' chúng sau chu kỳ 'for'. – jamapag