Мое приложение загружает сообщения из Интернета в UITableViewCell. Когда пользователь нажимает на ячейку, мне нужно установить эту статью как прочитанную (как на Mail.app). Я не знаю, как это сделать.
Я добавляю URL (когда пользователь нажимает ячейку) в базу данных (например, «url | url | url»), открываю подробный вид. И когда он возвращается к UITableView, проверяя существующий URL в БД. Стол сейчас слишком медленный!
Можете ли вы помочь мне и сказать, какой другой метод я могу использовать для этого? Как в mail.app. Я использую пользовательскую ячейку и код в методе drawRect. Пожалуйста, помогите
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *CellIdentifier = [NSString stringWithFormat:@"%d",indexPath.row];
NSMutableArray *array=[NSMutableArray array];
if([[NSUserDefaults standardUserDefaults] objectForKey:@"readPostS"]!=nil)
[array addObjectsFromArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"readPostS"]];
NSUInteger indexOfObject = [array count]>0?[array indexOfObject:[NSNumber numberWithInt:indexPath.row]]:100000; //I add this, because row don't want update using updateRowAtIndexPath
QuickCell *cell = (QuickCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil || (indexOfObject!=NSNotFound && indexOfObject!=100000))
{
cell = [[[QuickCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
cell.frame = CGRectMake(0.0, 0.0, 320.0, 68.0);
cell.accessoryType = UITableViewCellAccessoryNone;
if([self.subject count]>0)
{
[self.allImages addObject:[NSNull null]];
NSString *userNameLJ = [NSString stringWithFormat:@"%@",[self.journalurl objectAtIndex:indexPath.row]];
userNameLJ = [userNameLJ stringByReplacingOccurrencesOfString:@"http://"
withString:@""];
userNameLJ = [userNameLJ stringByReplacingOccurrencesOfString:@".livejournal.com"
withString:@""];
userNameLJ = [userNameLJ stringByReplacingOccurrencesOfString:@"community/"
withString:@""];
NSString *postURL = [NSString stringWithFormat:@"http://m.livejournal.com/read/user/%@/%@",userNameLJ,[self.ditemid objectAtIndex:indexPath.row]];
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:[self.subject objectAtIndex:indexPath.row] forKey:@"title"];
[dict setObject:[Utilities replaceForCell:[Utilities flattenHTML:[self.entry objectAtIndex:indexPath.row]]] forKey:@"description"];
if([[database executeQuery:@"SELECT * FROM read WHERE posts=?;",postURL] count]>0)
{
//if this post is read
[dict setObject:[NSNumber numberWithBool:NO] forKey:@"highlighted"];
}
else {
[dict setObject:[NSNumber numberWithBool:YES] forKey:@"highlighted"];
}
[dict setObject:[self.journalname objectAtIndex:indexPath.row] forKey:@"nick"];
[cell setContentForCell:dict];
BOOL trueOrFalse = [[self.allImages objectAtIndex:indexPath.row] isKindOfClass:[NSNull class]]?YES:NO;
if(trueOrFalse)
{
if (tableView.dragging == NO && tableView.decelerating == NO)
{
//if no image cached now, download it
if(indexPath.row<6 && self.updating==YES)
[self startDownloading:indexPath];
if(self.updating==NO)
[self startDownloading:indexPath];
}
}
else
{
[cell setImageForCell:[self.allImages objectAtIndex:indexPath.row]];
}
}
if(indexOfObject!=NSNotFound && indexOfObject!=100000)
{
//delete this row from userdefaults
[array removeObjectAtIndex:indexOfObject];
if([array count]>0)
[[NSUserDefaults standardUserDefaults] setObject:array forKey:@"readPostS"];
else [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"readPostS"];
}
}
return cell;
}
//////////////////////////////////////////////////////////////
///////-(void)viewWillApear
//////////////////////////////////////////////////////////////
NSMutableArray *readPosts = [NSMutableArray array];
if([[NSUserDefaults standardUserDefaults] objectForKey:@"readPostS"]!=nil)
{
[readPosts addObjectsFromArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"readPostS"]];
self.read = (NSMutableArray*)[database executeQuery:@"SELECT * FROM read;"];
for(int i=0;i<[readPosts count];i++)
{
[self.myTableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:[[readPosts objectAtIndex:i] intValue] inSection:0]] withRowAnimation:UITableViewRowAnimationNone];
}
}
///////////////////////////////////////////////
///////THIS FILE OPENS POSTS FOR READING
///////////////////////////////////////////////
if([[database executeQuery:@"SELECT * FROM read WHERE posts=?;",self.postURL] count]==0)
{
[database executeNonQuery:@"INSERT INTO read VALUES (?);",self.postURL];
NSMutableArray *defaults = [NSMutableArray array];
if([[NSUserDefaults standardUserDefaults] objectForKey:@"readPostS"]!=nil)
defaults = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"readPostS"]];
[defaults addObject:[NSNumber numberWithInt:self.currentIndex]];
[[NSUserDefaults standardUserDefaults] setObject:defaults forKey:@"readPostS"];
}
Ok. Я думаю, мой код плохой, и вы можете понять, что я здесь делаю) Ответьте на другой вопрос. Как я могу обновить скрытые ячейки? Пользователь видит только 6 ячеек в данный момент, мне нужно обновить, например, 10 ячеек. Как?
Или как перезагрузить ячейку, если она уже существует? Скажем -
NSString *CellIdentifier = [NSString stringWithFormat:@"%d",indexPath.row];
QuickCell *cell = (QuickCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[QuickCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
cell.frame = CGRectMake(0.0, 0.0, 320.0, 68.0);
cell.accessoryType = UITableViewCellAccessoryNone;
.........}
Теперь ячейка существует, и если я вызываю данные перезагрузки, ничего не происходит. И reloadCellAtIndexPath тоже не работает, потому что ячейка имеет уникальный идентификатор и ixists.
КАК МОЖНО СЛЕДУЕТ ПЕРЕЗАГРУЗИТЬ КЛЕТОК И ВЫЗВАТЬ СНОВА?))