Наближава пускането на приложението: 2 бързи въпроса

тъй като наближавам пускането на приложението си, се опитвам да се уверя, че използвам стабилен код, за да проверя дали приложението е стартирано преди (за да извърша настройка за първи път). Това (очевидно метод без излишни средства, който не взема предвид версията на приложението и актуализациите) е доста солиден начин да се определи дали приложението е стартирано?

В моя метод делегат на приложение didFinishLaunchingWithOptions изпълнявам следното всеки път:

NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];

if(![defaults objectForKey:@"not_first_launch"])
{
    NSLog(@"This is the first time the app has been launched.\nPerforming first-time setup procedures...");
    [self runFirstTimeSetup];
}

Вторият ми въпрос по същество е, мога ли да приема, че когато пусна актуализация на приложение, директорията с документи на потребителя за пясъчника на моето конкретно приложение ще остане неизтрита? Актуализацията на приложението просто добавя ли към директорията, а не я изтрива и инсталира отново? Имам нужда файловете на потребителя да останат наоколо дори когато актуализирам приложението (доста очевидно), но не искам да правя погрешно предположение и потребителите да губят данни всеки път, когато пусна актуализация.

Благодаря!


person Rich Byden    schedule 02.12.2011    source източник


Отговори (2)


Да, това е добра употреба на NSUserDefaults.

Потребителските данни се запазват чрез актуализации.

Просто се уверете, че съхранявате данните, които идват с вашето приложение, и данните, генерирани по време на изпълнение, в отделни контейнери. Така че, ако трябва да промените първото (чрез актуализация на приложението), второто остава недокоснато. Например, не поставяйте и двете в една и съща SQLite таблица.

person Sanjay Chaudhry    schedule 02.12.2011
comment
Страхотно, това искам да чуя :) - person Rich Byden; 03.12.2011

Знам, че вече приехте отговор, но просто исках да засегна темата. Начинът, по който проверявам дали приложението се стартира за първи път, е следният:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    ...normal code...

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if (![defaults objectForKey:@"kFirstUse"]) {
        [defaults setObject:[NSDate date] forKey:@"kFirstUse"];
        [defaults synchronize];
    }
}

Причината, поради която исках да публикувам, е, че докато проверявам дали това е първото стартиране на потребителя, запазвам и датата на първото им стартиране. За да няма допълнителен код, реших защо да не запазя тази първа дата на стартиране. Изобщо не използвам тази информация в приложението си, но си мислех, че може би в бъдеще ще мога. В бъдеще обмислях да добавя в App Purchase и бих раздал нещата безплатно на първоначалните си потребители; така че това ми позволява да бъда подготвен за бъдещето и в същото време да постигна целта си.

И само за пълнота, NSUserDefaults продължават между актуализациите на приложението, просто се уверете, че не променяте ключа на който и да е обект, в противен случай този обект няма да бъде намерен.

Друго хубаво нещо, което трябва да добавите, е този ред [defaults synchronize]; - който буквално кара приложението да запазва тези данни. Приложението периодично автоматично запазва данните, но аз обичам да съм в безопасност и да знам, че нещата ми са запазени.

уведомете ме, ако имате други въпроси

person Andrew    schedule 03.12.2011
comment
Готино. този фрагмент е полезен за мен в момента. благодаря, че го публикувахте. - person NCFUSN; 04.04.2014
comment
Радвам се, че ти помогна. - person Andrew; 04.04.2014