Подтвердить что ты не робот

Могу ли я передать делегат в качестве параметра objective-c

Я работаю с NSOperationQueue, и я хочу добавить новые NSOperations в NSOperationQueue. Это очередь, которая живет в одном экземпляре класса, который у меня есть. Это сделало бы намного проще, если бы я мог переместить все в статический класс, передав делегат.

Вот мой код сейчас, когда он живет - это в cellForRowAtIndexPath

 NSString *key = [NSString stringWithFormat:@"%@%@",cell.dataItem.ItemID, cell.dataItem.ManufacturerID];

        if (![self.imgOperationInQueue valueForKey:key]) {

            ImageOperation *imgOp = [[ImageOperation alloc] initWithItemID:cell.dataItem.ItemID withManufacturerID:cell.dataItem.ManufacturerID withReurnType:kThumbnail];
            imgOp.identifier = [NSString stringWithFormat:@"%i", cell.tag];
            imgOp.delegate = self;
            [[SharedFunctions sharedInstance] addImageOperationToQueue:imgOp];
            [imgOp release];

            // store these in the dictionary so we don;t queue up requests more than once
            [self.imgOperationInQueue setValue:cell.dataItem.ItemID forKey:key];
        }

Если бы я мог добавить делегата в качестве параметра, я мог бы поместить весь этот код в общий одноэлементный класс и вызвать его из любого места в моем приложении.

Я полагаю, что я мог бы использовать NSNotification - или я могу использовать какой-то блок?

4b9b3361

Ответ 1

Просто создайте соответствующий метод init, который передается в делегате.

- (id)initWithItemID:(NSString *)itemID
  withManufacturerID:(NSString *)manufacturerID
       withReurnType:(NSInteger)type
            delegate:(id<YourDelegate>)theDelegate
{
    self = [super init];
    if (self)
    {
        .... // Other assignments
        self.delegate = theDelegate;
    }

    return self;
}