У меня есть это приложение, которое использует материал iBeacon. Основываясь на AirLocate, я перечисляю маяки в своем районе.Как предотвратить повторный запуск методов из непрерывных данных?
Это делается в UITableView следующим образом:
- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region
{
self.rangedRegions[region] = beacons;
[self.beacons removeAllObjects];
NSMutableArray *allBeacons = [NSMutableArray array];
for (NSArray *regionResult in [self.rangedRegions allValues])
{
[allBeacons addObjectsFromArray:regionResult];
}
for (NSNumber *range in @[@(CLProximityUnknown), @(CLProximityImmediate), @(CLProximityNear), @(CLProximityFar)])
{
NSArray *proximityBeacons = [allBeacons filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"proximity = %d", [range intValue]]];
if([proximityBeacons count])
{
self.beacons[range] = proximityBeacons;
}
}
[self.tableView reloadData];
}
оттуда,
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
называется.
Здесь я вызываю метод, который запрашивает онлайн-базу данных для значения, определенного для ячейки.
Проблема заключается в том, что диспетчер местоположений отправляет практически непрерывные обновления, заставляя меня многократно отправлять запросы в базу данных для информации, которая не изменяется после первого запроса. После этого я должен обновить интерфейс.
Каков наилучший подход, чтобы избежать этого избыточного запроса?
Я надеюсь, что это имеет смысл
заранее спасибо
S
Вот делегаты Tableview:
- (UITableViewCell *)tableView:(UITableView *)tView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *identifier = @"Cell";
myCell *cell = [tView dequeueReusableCellWithIdentifier:identifier];
NSNumber *sectionKey = [self.beacons allKeys][indexPath.section];
CLBeacon *beacon = self.beacons[sectionKey][indexPath.row];
User * myBuddy = [self retrieveDataFromUserwithMajor:[beacon.major shortValue] andMinor:[beacon.minor shortValue]];
NSString *path=[NSString stringWithFormat:@"http://www.myplace.com/%@.png", myBuddy.userID];
NSURL *url = [NSURL URLWithString:path];
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
cell.userSelfie.image=image;
cell.userName.text=myBuddy.userName;
cell.userSetting2.text=myBuddy.userSetting2;
cell.userSetting3.text=myBuddy.userSetting3;
}
return cell;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return self.beacons.count;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSArray *sectionValues = [self.beacons allValues];
return [sectionValues[section] count];
}
Спасибо, Lyndsey! Так как я не уверен, как добраться до self.tableDataSourceArray Я включил «нерелевантную логику» в вопрос ...... потенциально из дурака из себя. – Sjakelien
@Sjakelien OK, это определенно помогает ... Я обновлю в секунду ... –
ты персик! – Sjakelien