#ios #objective-c #xcode #self
#iOS #objective-c #xcode #self
Вопрос:
Я пытаюсь обновить объект моего класса данными с сервера. Итак, мне нужно присвоить значение self внутри успешного блока. Когда я использую __weak перед ссылкой блока на self, я получаю nil в self после присвоения. И без __weak у меня цикл сохранения. Итак, возможно ли присвоить новое значение self внутри блока? Если это не так, есть ли какие-либо другие способы обновить значение self?
- (void) refreshAssignment:(void (^)())successBlock Error:(void (^)(NSString *errorMessage))errorBlock{
NSString *subUrl = @"/getAssignmentById";
NSDictionary *prs = @{@"assignmentId":self.taskId,
@"mask":[NSNumber numberWithInteger:1]
};
__block __weak Assignment* Self = self;
[[NetworkManager sharedSource] getStandart:prs andUrl:subUrl Success:^(NSDictionary *data) {
Self = [[NetworkManager sharedSource] assignmentsWithArray:data[@"data"] Type:Self.type][0];
} Error:^(NSString *errorMessage) {
errorBlock(errorMessage);
}]; }
Комментарии:
1. На самом деле это не имеет смысла. Вы создаете новую переменную с именем
Self
, которая инициализируетсяself
, но позже вы присваиваете ей что-то еще в блоке, ноSelf
после этого присвоения она ничем не используется, поэтому неясно, в чем смысл присвоения.
Ответ №1:
Правильный weakSelf
шаблон:
__weak typeof(self) weakSelf = self;
Но вы ничего не можете присвоить self
.
Единственное место, где возможно присвоение self
, — это в init
методе.
Вероятно, вы хотите присвоить результаты свойству в классе.
Комментарии:
1. Итак, если я вызываю свой метод init, как я могу присвоить значение self внутри блока? __weak typeof(self) weakSelf = self; — это постоянная ссылка на self. Будет невозможно присвоить weakSelf что-либо.
2. Вы не можете присвоить какое-либо значение self.
self
является указателем на объект. Таким образом, внутри блока вы можете изменять свойства объекта, но не сам объект. Чего именно вы пытаетесь достичь?3. Я пытаюсь обновить объект self данными с сервера
4. я предлагаю обновить свойства внутри объекта.