0 votes

NSOperation incapable de charger des données sur le TableView

J'ai un problème avec la NSOperation. J'ai essayé de nombreuses façons, mais elle s'exécute derrière l'écran, mais ne s'affiche pas dans la vue de ma table. Quelqu'un peut-il m'aider à résoudre ce problème ? Je suis nouveau dans NSOperation.

Récents.h

#import <UIKit/UIKit.h>
#import "FlickrFetcher.h"

@interface Recents : UITableViewController {
 FlickrFetcher *fetcher;
 NSString *name;
 NSData *picture;
 NSString *picName;
 NSMutableArray *names;
 NSMutableArray *pics;
 NSMutableArray *lists;
 NSArray *namelists;
 NSOperationQueue *operationQueue;
}
@property (nonatomic,retain)NSString *name;
@property (nonatomic,retain)NSString *picName;
@property (nonatomic,retain)NSData *picture;
@property (nonatomic,retain)NSMutableArray *names;
@property (nonatomic,retain)NSMutableArray *pics;
@property(nonatomic,retain)NSMutableArray *lists;
@property(nonatomic,retain)NSArray *namelists;
@end

Récents.m

#import "Recents.h"
#import "PersonList.h"
#import "PhotoDetail.h"

@implementation Recents

@synthesize picName,picture,name,names,pics,lists,namelists;
 // The designated initializer.  Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        // Custom initialization
  self.title=@"Recents";
    }
    return self;
}

- (void)beginLoadingFlickrData{

    NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(synchronousLoadFlickrData) object:nil];
    [operationQueue addOperation:operation];
    [operation release];
}

- (void)synchronousLoadFlickrData{
 fetcher=[FlickrFetcher sharedInstance];
 NSArray *recents=[fetcher recentGeoTaggedPhotos];
 [self performSelectorOnMainThread:@selector(didFinishLoadingFlickrDataWithResults:) withObject:recents waitUntilDone:NO];
}

- (void)didFinishLoadingFlickrDataWithResults:(NSArray *)recents{

 for(NSDictionary *dic in recents){
  [names addObject:[fetcher usernameForUserID:[dic objectForKey:@"owner"]]];
  if([[dic objectForKey:@"title"]isEqualToString:@""]){
   [pics addObject:@"Untitled"];
  }else{
   [pics addObject:[dic objectForKey:@"title"]];
  }
  NSLog(@"OK!!");
 }
 [self.tableView reloadData];
    [self.tableView flashScrollIndicators];
}

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];
 operationQueue = [[NSOperationQueue alloc] init];
 [operationQueue setMaxConcurrentOperationCount:1];
 [self beginLoadingFlickrData];
 self.tableView.rowHeight = 95;

}

/*
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
*/

- (void)didReceiveMemoryWarning {
 // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

 // Release any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
 // Release any retained subviews of the main view.
 // e.g. self.myOutlet = nil;
}

- (void)dealloc {
    [super dealloc];
}

#pragma mark -
#pragma mark Table View Data Source Methods
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
 return[names count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
 static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";
 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];
 if (cell == nil) {
  cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:SimpleTableIdentifier] autorelease];
 }
 cell.detailTextLabel.text=[names objectAtIndex:indexPath.row];
 cell.textLabel.text=[pics objectAtIndex:indexPath.row];
 //UIImage *image=[UIImage imageWithData:[self.lists objectAtIndex:indexPath.row]];
 //cell.imageView.image=image;
 return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
 fetcher=[[FlickrFetcher alloc]init];
 PhotoDetail *scroll=[[PhotoDetail alloc]initWithNibName:@"PhotoDetail" bundle:nil];
 scroll.titleName=[self.pics objectAtIndex:indexPath.row];
 scroll.picture = [UIImage imageWithData:[self.lists objectAtIndex:indexPath.row]];
 [self.navigationController pushViewController:scroll animated:YES];

}

3voto

John Biesnecker Points 2138

Est-ce qu'il vous arrive d'initialiser pics (c'est-à-dire, NSMutableArray *pics = [[NSMutableArray alloc] init] ou quelque chose de ce genre) ? Si c'est le cas, je ne le trouve pas dans le code. Si ce n'est pas le cas, c'est probablement le problème -- vous envoyez tous ces messages pour ajouter des objets au tableau à nil .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X