2011-09-21 2 views
2

Я закончил свой собственный проект. Так что я тестировал его на симуляторе, и все в порядке. Но, к сожалению, проект не работает на моем реальном iphone. Эта ошибка возникает:Завершение приложения из-за неперехваченного исключения «NSInvalidArgumentException»

"Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSFileManager copyItemAtPath:toPath:error:]: source path is nil'" 

В чем причина? Вот код, который я использовал:

RootViewController *rootViewController; 
... 
- (void) startApp; 
{ 
    [rootViewController init];   // error occured 
} 

RootViewController является одним из проекта Simple File.

void Game::readData() 
{ 

    NSError *error; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //1 
    NSString *documentsDirectory = [paths objectAtIndex:0]; //2 
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"GameInfo.plist"]; //3 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 

    if (![fileManager fileExistsAtPath: path]) //4 
    { 
     NSString *bundle = [[NSBundle mainBundle] pathForResource:@"GameInfo" ofType:@"plist"]; 

     [fileManager copyItemAtPath:bundle toPath: path error:&error]; //6 
    } 

    NSMutableDictionary *savedStock = [[NSMutableDictionary alloc] initWithContentsOfFile: path]; 

    //load from savedStock example int value 
    gameMaxLevel = [[savedStock objectForKey:@"GameMaxLevel"] intValue]; 

    [savedStock release]; 

} 

недействительными игры :: readData() {

NSError *error; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //1 
NSString *documentsDirectory = [paths objectAtIndex:0]; //2 
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"GameInfo.plist"]; //3 

NSFileManager *fileManager = [NSFileManager defaultManager]; 

if (![fileManager fileExistsAtPath: path]) //4 
{ 
    NSString *bundle = [[NSBundle mainBundle] pathForResource:@"GameInfo" ofType:@"plist"]; 

    [fileManager copyItemAtPath:bundle toPath: path error:&error]; //6 
} 

NSMutableDictionary *savedStock = [[NSMutableDictionary alloc] initWithContentsOfFile: path]; 

//load from savedStock example int value 
gameMaxLevel = [[savedStock objectForKey:@"GameMaxLevel"] intValue]; 

[savedStock release]; 

}

+0

доля больше код. где вы используете метод copyItemAtPath? – Alin

+0

Я использовал метод copyitemAtPath в файле plist/write plist. – bTagTiger

+1

убедитесь, что GameInfo.plist указан именно так. iOS чувствительна к регистру – Alin

ответ

0

проверить, если ваш GameInfo.plist существует в ресурсе вашего приложения, и оно постоянно находиться внутри папки приложения (если вы выполняете свой код на двух или более устройствах). Если проблема не решена, поделитесь своим полным журналом исключений.

Смежные вопросы

 Смежные вопросы