У меня действительно странная ситуация. Я создаю одиночный объект класса с именем «Профиль» следующим образом:
static Profile *currentProfile;
+ (Profile *)currentProfile
{
@synchronized(self)
{
if (currentProfile == nil)
currentProfile = [[Profile alloc] init];
}
return currentProfile;
}
- (id)init
{
self = [super init];
if (self)
{
// Initialization code here.
isChecked = [[[NSUserDefaults standardUserDefaults] objectForKey:@"isChecked"] boolValue];
if (isChecked)
{
NSLog(@"isChecked block is called");
NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"myEncodedObjectKey"];
self = (Profile *) [NSKeyedUnarchiver unarchiveObjectWithData:data];
[self retain];
for (int i = 0; i < self.avatar.count; i++)
[self.avatar replaceObjectAtIndex:i withObject:[UIImage imageWithData:[self.avatar objectAtIndex:i]]];
}
else
{
password = @"";
pfefferID = @"";
email = @"";
avatar = [[NSMutableArray alloc] initWithObjects:
[UIImage imageNamed:@"empty_image.png"],
[UIImage imageNamed:@"empty_image.png"],
[UIImage imageNamed:@"empty_image.png"],
[UIImage imageNamed:@"empty_image.png"],
[UIImage imageNamed:@"empty_image.png"],nil];
isBoy = YES;
friends = [[NSMutableDictionary alloc] init];
rating = 0;
}
}
return self;
}
В методе init я проверяю определенное условие, хранящееся в NSUserDefaults, используя переменную BOOL с именем isChecked. isChecked равен YES, и все работает нормально. Но ... я создаю этот объект профиля в файле AppDelegate, как это
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
users = [[NSMutableDictionary alloc] init];
usersForLeaderboardFromServer = [[NSMutableDictionary alloc] init];
listOfFriendsFromServer = [[NSMutableDictionary alloc] init];
currentProfile = [Profile currentProfile];
sessionID = 0;
if (!currentProfile.isChecked)//why????
NSLog(@"not checked");
if (currentProfile.isChecked)
{
[self getUsersForLeaderboardFromServer];
MainMenuView *mainMenu = [[[MainMenuView alloc] init] autorelease];
[self.navigationController pushViewController:mainMenu animated:YES];
}
}
Таким образом, та же самая переменная isChecked, которая моментом (намного меньше, чем момент фактически) назад была равна YES, становится равной NO при использовании в методе didFinishLaunchingWithOptions приложения, получая к нему доступ через точку. В чем дело? Я могу справиться с этим, но мне просто любопытно, в этой ситуации. Вы знаете, что с ним не так?