Как я могу присвоить значение self внутри блока?

#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. я предлагаю обновить свойства внутри объекта.