2010-01-24 3 views
0

Всякий раз, когда я строю & запустить свою программу, я замечаю, что новый каталог будет создаваться в: /Users/поддержки Имя пользователя/Library/Application/iPhone Simulator/User/ApplicationsIPhone Основные данные Постоянство и Lifecycle Вопрос

Следовательно, мне не удастся сохранить основные данные между сборками приложений. То, как я думал обойти эту проблему (с точки зрения тестирования), состояло в том, чтобы просто использовать симулятор iphone для выхода из приложения, нажав кнопку кругового меню и перезапустив мое приложение. I.e., не строить его, а просто повторно запускать через симулятор, чтобы проверить, сохранены ли данные в основных данных.

Теперь я хотел проверить, сохраняются ли данные при каждом запуске приложения. Событие, которое я использую:

  • (аннулируются) applicationDidFinishLaunching: (UIApplication *) применение

Но это срабатывает только после того, как я построить & запустить приложение, но не уволят каждый раз я перезапускаю приложение - с помощью симулятора iphone (т. е. нажав кнопку меню, а затем перезапустив мою программу).

Есть ли другое событие, которое я должен использовать? Если у меня было событие, которое запускается каждый раз при загрузке приложения, я думаю, что я мог бы просто проверить, есть ли в нем данные ядра, если я просто не заполняю его XML-файлом для его инициализации, если он имеет данных я ничего не делаю. Звучит правильно? Если да, то что называется этим событием?

+1

Эй Shnitzel, Чтобы быть в состоянии увидеть выход NSLog, когда вы не строите ваше приложение, вы должны на Xcode пойти Run> Присоединить к процессу> iPhone Simulator, и чем ваше приложение будет запущен, и вы смогут увидеть журналы. В противном случае, если к приложению не подключен журнал, как вы увидите журналы. Другой вариант - создать текстовое представление, а вместо использования NSLog вы можете распечатать вывод в текстовом представлении. – vfn

ответ

5

-applicationDidFinishLaunching: будет называться КАЖДОЕ время запуска приложения, будь то от отладчика, попадание значка в Springboard (launcher) или любой из них на устройство.

На симе папка в каталоге .../Applications создана для вашего приложения, и любые сохраненные в ней данные будут сохранены. Фактическое имя будет меняться каждый раз при создании и запуске приложения, но содержимое останется прежним, поэтому вы можете хранить там данные.

+0

Я не думаю, что это срабатывает каждый раз, потому что если у меня есть NSLog (@ «привет»); в -applicationDidFinishLaunching, он просто скажет, что привет, хотя я буду повторно запускать приложение несколько раз через трамплин. – foreyez

+0

Это действительно называется каждый раз, когда ваше приложение запускается. Проблема в том, что вы не используете NSLog правильно. – vfn

+0

Чтобы просмотреть инструкции NSLog() из Simulator, когда вы не отлаживаете, вам нужно открыть приложение Console в/Applications/Utilities. –

0

Вы пробовали работать с правом

-(void)applicationDidBecomeActive { 

} 
+0

Хм, это странно, это событие также вызывает только один раз после того, как я построю вещь, но не после того, как я перезапустил ее на трамплине. – foreyez

1

Бена. Причина, по которой вы не видите -applicationDidFinishLaunching, заключается в том, что отладчик не запускается при запуске с симулятора, этот метод все еще срабатывает.

Похоже, что вы еще на раннем этапе разработки основных данных. Вы, вероятно, выиграете от включения Lightweight Migration.

NSError *error; 
NSURL *storeURL = <#The URL of a persistent store#>; 
NSPersistentStoreCoordinator *psc = <#The coordinator#>; 
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: 
    [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, 
    [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]; 

if (![psc addPersistentStoreWithType:<#Store type#> 
    configuration:<#Configuration or nil#> URL:storeURL 
    options:options error:&error]) { 
    // Handle the error. 
} 

Вместо того, чтобы уничтожить ваше хранилище данных каждый раз, когда вы делаете изменения в модель данных, это должно позволить основным данным разумно обновлять модель для вас.

Извините, это немного не по теме, но я потратил много времени на стирание и перезагрузку моего хранилища данных, потому что я не понимал, что существует такая вещь, как эта легкая миграция.

1

Как пишет vfn, вам нужно либо приложить отладчик, либо сохранить значения журнала на диске.

Я делал OAuth, и для этого требуется, чтобы симулятор покинул приложение, а другая - в Safari, а затем Safari снова откроет приложение, используя схему URL.Это означало, что я не мог получить журнал различных шагов аутентификации, зарегистрированных после выхода приложения.

В любом случае, я написал класс, который будет регистрировать сообщения "log.txt" находится в ~/пользователя */библиотека/приложение поддержки/iPhone Simulator/пользователь/YourApp */документы

* пользователя и YourApp является конечно, имена переменных.

// 
// LogFile.m 
// 
// 
// Created by RickiG on 11/30/09. 
// Copyright 2009 www.rickigregersen.com.. All rights reserved. 
// 

#import "LogFile.h" 


@implementation LogFile 

+ (void) stringToLog:(NSString *) str { 

    NSDate *now = [NSDate date]; 
    NSDateFormatter *logTimeFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
    [logTimeFormatter setDateFormat:@"HH:mm:ss"]; 
    NSString *timeStr = [NSString stringWithFormat:@"%@", [logTimeFormatter stringFromDate:now]]; 
    NSString *logMsg = [NSString stringWithFormat:@"%@\n%@\n\n", timeStr, str]; 
    NSString *docsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSString *path = [docsDirectory stringByAppendingPathComponent:@"log.txt"]; 

    NSData *dataToWrite = [[NSString stringWithString:logMsg] dataUsingEncoding:NSUTF8StringEncoding]; 

    // Check if file exists 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 

    if([fileManager fileExistsAtPath:path]) { // Returns a BOOL  

     NSData *dataFromFile = [[NSData alloc] initWithContentsOfFile:path]; 
     NSMutableData *combinedDataToWrite = [NSMutableData dataWithData:dataFromFile]; 
     [combinedDataToWrite appendData:dataToWrite]; 
     [combinedDataToWrite writeToFile:path atomically:YES]; 
     [dataFromFile release]; 

    } else {  

     [fileManager createFileAtPath:path contents:dataToWrite attributes:nil]; 
    } 
} 

@end 
+0

да, вы, ребята, были правы, что он вызывал этот метод за кулисами, и этот образец журнала пригодится, спасибо. – foreyez

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