내 iPhone에서 WIFI를 통해 Mac에 설치된 webService에 연결하고 있습니다.RestiKit으로 다운로드하는 동안 iPhone이 너무 느려집니다.
다른 요청으로 각각 4 개의 데이터 집합을 TableView에로드합니다. 첫 번째 다운로드가 완료되면 TableView에 데이터를로드하고 다음 다운로드를 계속 진행합니다.
RestKit이 작동하는 동안 앱이 거의 종료되었습니다. TableView를 간신히 스크롤 할 수 있으며 다운로드 프로세스가 완료 될 때까지 기다려야만 작동 할 수 있습니다.
내 장비에서 RestKit을 너무 무겁게 만들 수 없으므로 어떻게 작업하는 동안 데이터를 조용히 다운로드 할 수 있습니까?
편집 :
콘솔 장치에 다음과 같은 메시지를 실행할 때 내가 통지를 가지고 : 나는 여전히 의미를 얻으려고
warning: Unable to read symbols for /Users/david/Library/Developer/Xcode/iOS DeviceSupport/4.2.1 (8C148)/Symbols/usr/lib/info/dns.so (file not found).
warning: No copy of dns.so found locally, reading from memory on remote device. This may slow down the debug session.
.
AppDelegate. AEMEventosList를 초기화하고 downloadEventos 메소드를 호출하여 다운로드를 시작합니다.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
//Original code
AEMMasterViewController *masterViewController = [[[AEMMasterViewController alloc] initWithNibName:@"AEMMasterViewController" bundle:nil] autorelease];
//Inicializar lista de eventos
AEMEventosList *aux = [[AEMEventosList alloc] init];
aux.delegate = masterViewController;
//Asignar la lista de eventos a la variable miembro de la clase
self.eventosList = aux;
[aux release];
// Comenzar la descarga de eventos desde el servidor
[self.eventosList downloadEventos];
//Orignal code
self.navigationController = [[[UINavigationController alloc] initWithRootViewController:masterViewController] autorelease];
// self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:0.71 green:0.45 blue:0.05 alpha:1];
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];
return YES;
}
AEMEventosList INTI 방법 :
-(id)init {
self = [super init];
if (self) {
self.eventos = [NSMutableDictionary dictionary];
self.downloadingEventosGroupFlag = 0;
self.eventosGroupNames = [NSArray arrayWithObjects:
kEventosToday,
kEventosInAWeek,
kEventosInAMonth,
kEventosLaterThanAMonth,
nil];
//Iniciar el manager
self.manager = [RKObjectManager objectManagerWithBaseURL:kRestURL];
//Mapeo de atributos JSON a miembros de la clase AEMEvento
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[AEMEvento class]];
[mapping mapAttributes:
kIdEvento,
kNombreEvento,
kEntradilla,
kDescripcion,
kDiaDeInicio,
kDiaDeFin,
kHorarioTexto,
kIdFuente,
kNombreFuente,
kFotoURL,
kWebURL,
kUbicaciones,
kHorarios,
kDiaDeInicioYFinTexto,
nil];
//Especificar el mapeo de fechas
NSDateFormatter* dateFormatter = [NSDateFormatter new];
[dateFormatter setDateFormat:kDateFormatStringForJson];
[dateFormatter setTimeZone:[NSTimeZone defaultTimeZone]];
mapping.dateFormatters = [NSArray arrayWithObject:dateFormatter];
[dateFormatter release];
//Asignar el mapeo al manager siempre que se encuentre la clave "eventos" en el archivo JSON
[self.manager.mappingProvider setMapping:mapping forKeyPath:kEventos];
}
return self;
}
AEMEventosList downloadEventos 방법
-(void)downloadEventos {
//Iniciar la descarga del grupo de eventos indicado por el atributo downloadingEventosGroupFlag
[self.manager loadObjectsAtResourcePath:[self.eventosGroupNames objectAtIndex:self.downloadingEventosGroupFlag] delegate:self];
//Enviar al delegado el mensaje de incio de descarga para que muestre la vista con el indicador de progreso.
[self.delegate AEMEventosListDidStartLoadingEventos:self];
}
테이블보기 위임 Mehods :
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [self.eventosList.eventos count];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [[self.eventosList.eventos objectForKey:[self.eventosList.eventosGroupNames objectAtIndex:section]] count];
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 80;
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
switch (section) {
case 0:
return NSLocalizedString(@"Today", @"Today's events tableview section title.");
break;
case 1:
return NSLocalizedString(@"In a week", @"In a week's events table view section title.");
break;
case 2:
return NSLocalizedString(@"In a month", @"In a month's events tableview section title.");
break;
case 3:
return NSLocalizedString(@"Later than a month" , @"Later than a month events tableview section title.");
break;
default:
return nil;
break;
}
}
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//Obtener el evento de la lista para la celda
NSArray *aux = [self.eventosList.eventos objectForKey:[self.eventosList.eventosGroupNames objectAtIndex:indexPath.section]];
AEMEvento *auxEvento = [aux objectAtIndex:indexPath.row];
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.textLabel.textColor = [UIColor colorWithRed:0.2 green:0.3 blue:0.5 alpha:1];
cell.textLabel.font = [UIFont systemFontOfSize:13];
cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
cell.textLabel.numberOfLines = 2;
cell.detailTextLabel.textColor = [UIColor lightGrayColor];
cell.detailTextLabel.font = [UIFont systemFontOfSize:11];
cell.detailTextLabel.textAlignment = UITextAlignmentRight;
}
// Configure the cell.
cell.textLabel.text = auxEvento.nombreEvento;
cell.detailTextLabel.text = auxEvento.diaDeInicioYFinTexto;
NSString *path = [[NSBundle mainBundle] pathForResource:@"iconGijonBlanco" ofType:@"png"];
cell.imageView.image = [UIImage imageWithContentsOfFile:path];
return cell;
}
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
// Return NO if you do not want the specified item to be editable.
return NO;
}
그리고 코드를 보지 않고도 사람들이 질문에 답변 할 것으로 기대합니까? – lawicko
때로는 라인과 코드 줄을 붙여 넣지 않고도 쉽게 대답 할 수 있습니다. 어쩌면 당신이 옳고 더 나은 것을 미리 넣어두면 시간을 잃지 않을 것입니다. 죄송합니다. –
tableview 대리자 메서드를 게시 할 수 있습니까? 테이블 뷰의 스크롤이 느린 경우 일반적으로 대리자 메서드로 인해 발생합니다. –