2016-06-14 4 views
0

Я пытаюсь вставлять рекламные объявления google в удобное представление когда-либо «X» -элементов, я следовал этому руководству: (http://googleadsdeveloper.blogspot.com/2012/03/embedding-google-admob-ads-within.html), но я нахожу, что в представлении таблицы не всегда отображаются все данные в источнике данных, когда я добавляю ячейки для рекламных объявлений, обычно это отключается несколькими ячейками. Я считаю, что это связано с функцией numberOfRowsInInSection, но для меня жизнь не может окунуться в математику, чтобы вычислить эту корреляцию. До сих пор я иметь следующее: (kAdCellFrequency в настоящее время 10, но это должно быть регулируемым в произвольное значение):Встраивание рекламы в uitableview для каждой ячейки «x»

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 

    id<NSFetchedResultsSectionInfo> sectionInfo = [[eventResults sections] objectAtIndex:0]; 
    int sectionObjectsCount = [sectionInfo numberOfObjects]; 
    int advertCellCount = ([sectionInfo numberOfObjects])/kAdCellFrequency; 
    int additionalCellCount = sectionObjectsCount%kAdCellFrequency; 
    NSLog(@"event count %i Ad cell count %i additional count %i total cell count %i cells",sectionObjectsCount, advertCellCount, additionalCellCount, sectionObjectsCount+advertCellCount+additionalCellCount); 
    SDMEvent *theEvent = [[eventResults fetchedObjects]objectAtIndex:sectionObjectsCount-1]; 
    NSLog(@"Final object name %@",theEvent.eventName); 
    return sectionObjectsCount+advertCellCount+additionalCellCount; 
    //return sectionObjectsCount; 
} 

я добавил переменную additionalCellCount, как при использовании значения 10 для kAdCellFrequency данные были 3 клетки от правильно, но это же математика не может отображать правильную сумму, если kAdCellFrequency установлен на 5.

создания клеток объявления клеток или стандартная ячейки события:

adCell = (UICellWithAdvert *) [tableView dequeueReusableCellWithIdentifier:@"UICellWithAdvert"]; 
     eventCell = (UISDMEventCell *) [tableView dequeueReusableCellWithIdentifier:@"UISDMEventCell"]; 

     NSLog(@"index: %i cell freq: %i result: %i",[indexPath row], kAdCellFrequency, [indexPath row]%kAdCellFrequency); 
     if (([indexPath row] % kAdCellFrequency) == kAdCellFrequency-1) { // Advert cell dont add cell at index 0! 

      if (!adCell) { 
       NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"UICellWithAdvert" owner:nil options:nil]; 

       for(id currentObject in topLevelObjects){ 
        if ([currentObject isKindOfClass:[UICellWithAdvert class]]) { 
         adCell = (UICellWithAdvert *)currentObject; 
        } 
       } 
      } 

      // remove the advert from its current cell 
      [googleAdvert removeFromSuperview]; 

      // add to cell if it doesn't have advert 
      if (!googleAdvert.superview) { 

       [adCell addSubview:googleAdvert]; 
       NSLog(@"Add cell with Advert"); 
      } 

      return adCell; 
     } 
     else{ // event cell 

      if (!eventCell) { 
       NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"UISDMEventCell" owner:nil options:nil]; 

       for(id currentObject in topLevelObjects){ 
        if ([currentObject isKindOfClass:[UISDMEventCell class]]) { 
         eventCell = (UISDMEventCell *)currentObject; 
        } 
       } 
      } 

      return eventCell; 
     } 

отображение содержимого в ячейке индекс, я вынимают фактическую установку данных, просто нужно рассчитать:

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{ 

    int calculatedIndex = [indexPath row]-floor((float)[indexPath row]/kAdCellFrequency); 
    NSLog(@"Calculated %i",calculatedIndex); 
    NSLog(@"Normal Index %i",[indexPath row]); 

}

Любая помощь будет большим, даже указатель куда-нибудь, где я могу узнать больше о математике?

Обновление: ОК, похоже, что количество клеток возвращается правильно, но в некоторых случаях код устанавливает дублирование содержимого для некоторых ячеек, так что, например, ячейка 320 + 321 отображает одно и то же событие. Я думаю, что это связано со следующей математике в моем исходном коде (это псевдокод):

adCellFrequency = 10 

cellIndex = 319 
int calculatedIndex = [indexPath row]-floor((float)[indexPath row]/kAdCellFrequency); // equals 288 

cellIndex = 320 
int calculatedIndex = [indexPath row]-floor((float)[indexPath row]/kAdCellFrequency); // equals 288 

Примечание значения для обеих ячеек равны 288 означает, что две ячейки теперь показывают одинаковое содержание. Таким образом, количество ячеек корректно, но содержимое, отображаемое для индекса, неверно. (PaulW - этот вопрос также происходит, когда я конвертируется ваш код, вы получаете это .. я буду максить 325 клеток)

+0

Это была интересная проблема, поэтому я взглянул. Я не хочу давать ответ, который является всего лишь дампом кода, поэтому вот суть, которая является дампом кода: https://gist.github.com/paulw11/3dc18c3844df100863033f41890e532c – Paulw11

+0

Извините, я просто понял, что вы используя Objective C, и я написал свое решение в Swift. Надеюсь, вы сможете просмотреть последние три функции; они выполняют математику и должны быть довольно просто конвертировать в Objective C – Paulw11

+0

Привет, Пол, спасибо за такой подробный ответ, я преобразовал ваш код в объектив c, но я получаю ту же проблему, однако кажется, что ваш код помог мне сузить вопрос. Похоже, что математика имеет тенденцию возвращать одно и то же значение для более чем одной ячейки, поэтому количество клеток правильное, но элементы, заданные для ячейки, являются неправильными, я считаю, что это именно то, что происходило с моим кодом.Я добавил пример того, о чем я говорю в основной части моего вопроса, о любых мыслях? – SmokersCough

ответ

0

Обучение, как ловить рыбу ...

  1. Посмотрите, как ваши округление фактически управляется (например, посмотрите на lrintf() и запустите некоторые выборочные выходы диапазона чисел с помощью цикла for /.
  2. Почему бы не вывести значение calcIndex на метку в ячейке, чтобы вы могли визуализировать проблема более четко?
  3. Посмотрите на быстрые способы визуализации математики - даже электронная таблица может помочь.
+0

Hi dominic, я действительно приблизился к этому так же, как вы описали, вычеркивая ячейки и маркируя индексы, а затем принятые индексы. На самом деле не индексы вычисляются, а скорее возвращается количество ячеек, которое, как представляется, является проблемой. Вот где проблема кажется ложью, и ее немного сложно визуализировать что-то, основанное на произвольной ценности. – SmokersCough

+0

Итак, вы сделали таблицу с такими значениями, как index = 9, cell = 9; index = 10, cell = advert 1; index = 11, cell = 10 - где вы можете вычислить ячейку из индекса? – Dominic

+0

Не электронная таблица, но сама математика является твердой, у меня есть рисунок табличного представления с формулой и значением каждого индекса, рассчитанного на основе добавления ячейки объявления ... однако мой контент может перейти в сотни, чтобы я мог Не обращайте на это значение, – SmokersCough

Смежные вопросы