1) Не должно быть ничего плохого в указании делегата, кроме self, если объект, который вы предоставляете в качестве делегата, соответствует протоколу FBRequestDelegate.Кроме того, вы можете запросить объект FBRequest, полученный в методе делегата, чтобы определить, какой запрос был только что загружен и каков соответствующий ответ.
2) Чтобы сделать так, чтобы пользователь оставался в системе, необходимосохраните свойства accessToken (NSString) и expirationDate (NSDate) объекта Facebook при входе пользователя в систему. Затем, когда вы войдете в систему, попытайтесь восстановить эти значения.Некоторые фрагменты кода, которые могут помочь:
- (void)fbDidLogin
{
NSString *tokenString = [[self facebook] accessToken];
NSDate * expirationDate = [[self facebook] expirationDate];
[[NSUserDefaults standardUserDefaults] setObject: tokenString forKey:@"FacebookToken"];
[[NSUserDefaults standardUserDefaults] setObject: expirationDate forKey:@"FacebookExpirationDate"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
И, когда вам нужно войти в систему пользователя:
NSString *tokenString = [[NSUserDefaults standardUserDefaults] objectForKey:@"FacebookToken"];
NSDate *expDate = [[NSUserDefaults standardUserDefaults] objectForKey:@"FacebookExpirationDate"];
if (tokenString != nil && expDate != nil)
{
[facebook setAccessToken:tokenString];
[facebook setExpirationDate:expDate];
}
if ([facebook isSessionValid])
{
//Your session is valid, do whatever you want.
}
else
{
//Your session is invalid
//(either the session is past the expiration date or there is no saved data for the login)
//you need to ask the user to log in
}