Я новичок в разработке приложений для iOS.
Я пытаюсь создать пример приложения БД, которое сохраняет записи в БД и извлекает из них данные.
Приложение работает хорошо, когда я тестирую на симуляторах. Я создал локальную базу данных, а также, когда это необходимо, я делаю ее копию программно. Также я проверил, что локальная БД упоминается в «Ресурсах комплектов копирования».
Но я получаю сообщение об ошибке: «* Завершение приложения из-за необработанного исключения« NSInvalidArgumentException », причина:« * - [NSFileManager copyItemAtPath: toPath: error:]: исходный путь равен nil »» .
Я думаю, что фрагмент кода, который вызывает эту проблему,
"[FileManager copyItemAtPath: databasePathFromApp toPath: ошибка DBPath: nil];"
Он отлично работает на симуляторах, но не при тестировании на устройстве.
Ожидается помощь.
Мой код,
- (id)init {
self = [super init];
//Datbase Name
DBName=@"Person.sqlite3";
//Getting DB Path
NSArray *documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentsPath objectAtIndex:0];
DBPath=[documentsDir stringByAppendingPathComponent:DBName ];
//DBPath = [[NSString alloc] initWithString: [documentsDir stringByAppendingPathComponent:DBName]];
NSLog(@"DBPath is %@",DBPath);
return self;
}
-(void)checkAndCreateDB{
BOOL Success;
//NSFileManager maintains File
NSFileManager *FileManager = [NSFileManager defaultManager];
NSLog(@"line 1");
//Checks Database Path
Success = [FileManager fileExistsAtPath:DBPath];
NSLog(@"line 2");
//If file exists, it returns true
if(Success)return;
NSLog(@"line 3");
//NSString *databasePathFromApp = [[[NSBundle mainBundle]resourcePath]stringByAppendingPathComponent:DBName];
// Get the path to the database in the application package
NSString *databasePathFromApp=[[NSBundle mainBundle] pathForResource:@"Person.sqlite3" ofType:@"sqlite3"];
NSLog(@"line 4");
[FileManager copyItemAtPath:databasePathFromApp toPath:DBPath error:nil];
//[FileManager release];
NSLog(@"line 5");
}
Мое приложение вылетает при тестировании на устройстве после строки NSLOG (строка 4); Но хорошо работает в симуляторе.
Большое спасибо
Пракаш