Случается, когда вы пытаетесь использовать переменную, которая ранее не была определена.
Типичным примером может быть
foreach ($items as $item) {
// do something with item
$counter++;
}
Если вы ранее не определяли $counter
, код, указанный выше, вызывает уведомление.
Правильный способ - установить переменную перед ее использованием, даже если это просто пустая строка, например
$counter = 0;
foreach ($items as $item) {
// do something with item
$counter++;
}
Вопросы, относящиеся:
В значительной степени, что сказали Marc и Chris, хотя я предпочитаю изменять значение, когда приложение выходит в случае, если существует несколько областей приложения, которое должно знать об этом. В коде:
// -applicationDidFinishLaunching:
[[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES],@"firstLaunch",nil]];
// to check it:
[[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"];
// -applicationWillTerminate:
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"firstLaunch"];
Я обычно использую число версии приложения вместо булевской переменной для значения firstLaunch в пользовательских значениях по умолчанию. Тем путем можно различать первый запуск новой установки и первый запуск обновления. Может быть полезным в будущих версиях...
Можно установить булево значение в пользовательских значениях по умолчанию, чтобы сделать это. Установите ключ ко лжи, когда Вы звоните registerDefaults:
, и затем устанавливаете его на истинное изменение это к истинному после показа начального экрана справки или независимо от того, что необходимо сделать.
, Если у Вас есть персистентный файл данных, это всегда сохраняется после завершений приложения, проверяя, чтобы видеть, существует ли он, был бы иначе.
Сохраните его как пользовательская настройка , например, had_first_launch, установите на истинный на запуске, это только будет ложь на первом разе...
Я понимаю, что этот вопрос довольно старый, но я использовал его, чтобы придумать один метод определения первого запуска после «новой установки» (по сравнению с первым запуском после обновления / понижения) и подумал, что поделюсь кодом здесь для будущих зрителей, если он будет полезен.
// Get current version ("Bundle Version") from the default Info.plist file
NSString *currentVersion = (NSString*)[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
NSArray *prevStartupVersions = [[NSUserDefaults standardUserDefaults] arrayForKey:@"prevStartupVersions"];
if (prevStartupVersions == nil)
{
// Starting up for first time with NO pre-existing installs (e.g., fresh
// install of some version)
[self firstStartAfterFreshInstall];
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObject:currentVersion] forKey:@"prevStartupVersions"];
}
else
{
if (![prevStartupVersions containsObject:currentVersion])
{
// Starting up for first time with this version of the app. This
// means a different version of the app was alread installed once
// and started.
[self firstStartAfterUpgradeDowngrade];
NSMutableArray *updatedPrevStartVersions = [NSMutableArray arrayWithArray:prevStartupVersions];
[updatedPrevStartVersions addObject:currentVersion];
[[NSUserDefaults standardUserDefaults] setObject:updatedPrevStartVersions forKey:@"prevStartupVersions"];
}
}
// Save changes to disk
[[NSUserDefaults standardUserDefaults] synchronize];