iOS. Приемы программирования. Вандад Нахавандипур
Чтение книги онлайн.

Читать онлайн книгу iOS. Приемы программирования - Вандад Нахавандипур страница 36

СКАЧАТЬ target="_blank" rel="nofollow" href="#i_029.png"/>

      Рис. 1.29. В категории Ресурсы содержатся изображения для создаваемой специальной функции

      6. Реализуем метод canPerformWithActivityItems: нашей функции. Параметр этого метода содержит массив, который будет задан, когда метод-инициализатор контроллера вида с функцией получит массив компонентов функции. Не забывайте, что тип каждого из объектов данного массива является произвольным. Возвращаемое значение данного метода является логическим и указывает, можем ли мы произвести такую функцию над каждым конкретным элементом массива. Например, наша функция может обратить любое количество данных ей строк. То есть если мы найдем в массиве одну строку, это будет нам на руку, поскольку мы будем точно знать, что впоследствии сможем обратить эту строку. Но если мы получим массив из 1000 объектов, ни один из которых не будет относиться к приемлемому для нас типу, мы отклоним такой запрос, вернув NO от данного метода:

      – (BOOL) canPerformWithActivityItems:(NSArray *)activityItems{

      for (id object in activityItems){

      if ([object isKindOfClass: [NSString class]]){

      return YES;

      }

      }

      return NO;

      }

      7. Теперь реализуем метод prepareWithActivityItems: нашей функции, чей параметр относится к типу NSArray. Этот метод вызывается, если вы возвращаете YES от метода canPerformWithActivityItems:. Придется сохранить данный массив для последующего использования. Но на самом деле можно сохранять не весь массив, а только часть его объектов – те, что относятся к интересующему вас типу. Например, строки:

      – (void) prepareWithActivityItems:(NSArray *)activityItems{

      NSMutableArray *stringObjects = [[NSMutableArray alloc] init];

      for (id object in activityItems){

      if ([object isKindOfClass: [NSString class]]){

      [stringObjects addObject: object];

      }

      }

      self.activityItems = [stringObjects copy];

      }

      8. Последнее, но немаловажное: потребуется реализовать метод performActivity нашей функции, который вызывается, если iOS требует от нас произвести выбранные действия над списком ранее предоставленных произвольных объектов. В функции мы собираемся перебрать массив строковых объектов, извлеченных из массива с произвольными типами, обратить их все и отобразить для пользователя в окне с предупреждением:

      – (NSString *) reverseOfString:(NSString *)paramString{

      NSMutableString *reversed = [[NSMutableString alloc]

      initWithCapacity: paramString.length];

      for (NSInteger counter = paramString.length – 1;

      counter >= 0;

      counter—){

      [reversed appendFormat:@"%c", [paramString characterAtIndex: counter]];

      }

      return [reversed copy];

      }

      – (void) performActivity{

      NSMutableString *reversedStrings = [[NSMutableString alloc] init];

      for (NSString *string in self.activityItems){

      [reversedStrings appendString: [self reverseOfString: string]];

      [reversedStrings appendString:@"\n"];

      }

      UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Reversed"

      message: reversedStrings

      delegate: self

      cancelButtonTitle:@"OK"

      otherButtonTitles: nil];

      [alertView show];

СКАЧАТЬ