Я пытаюсь вставлять рекламные объявления 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 клеток)
Это была интересная проблема, поэтому я взглянул. Я не хочу давать ответ, который является всего лишь дампом кода, поэтому вот суть, которая является дампом кода: https://gist.github.com/paulw11/3dc18c3844df100863033f41890e532c – Paulw11
Извините, я просто понял, что вы используя Objective C, и я написал свое решение в Swift. Надеюсь, вы сможете просмотреть последние три функции; они выполняют математику и должны быть довольно просто конвертировать в Objective C – Paulw11
Привет, Пол, спасибо за такой подробный ответ, я преобразовал ваш код в объектив c, но я получаю ту же проблему, однако кажется, что ваш код помог мне сузить вопрос. Похоже, что математика имеет тенденцию возвращать одно и то же значение для более чем одной ячейки, поэтому количество клеток правильное, но элементы, заданные для ячейки, являются неправильными, я считаю, что это именно то, что происходило с моим кодом.Я добавил пример того, о чем я говорю в основной части моего вопроса, о любых мыслях? – SmokersCough