Все еще не уверен, что происходит, но я решил проблему. Вот что я сделал:
- (void)request:(FBRequest*)request didFailWithError:(NSError*)error {
if ([error code] == 1 && [[request method] isEqualToString:@"photos.upload"]) {
FBRequest *tryAgain = [FBRequest requestWithDelegate:self];
[tryAgain call:[request method] params:[request params] dataParam:(NSData *)[request dataParam]];
}
}
По сути, я просто попробовал еще раз. Повторная отправка того же запроса не сработала (не удалось с неверной подписью), поэтому я создал новый запрос со свойствами старого.
Приятно то, что это своего рода рекурсив: если новый запрос тоже терпит неудачу, он просто продолжит попытки. Надеюсь, я не сталкиваюсь с какими-либо негативными побочными эффектами.