- Registriert
- 24.02.11
- Beiträge
- 14
Hallo Leute ich habe folgendes Problem. Ich bekomme es nicht hin in meine Tableview ein Lazyloading zu integrieren. Ich habe in dieser sehr viele Bilder und dies führt zu Leaks und zu Scrollproblemen.
Hier mal mein code:
Wie krieg ich da bei dem Dingen hin. Alle Tutorials erklären das Lazyloading mit einem Eintrag in die AppDelegate. Da wird der ViewController als SubView zum Window eingebunden und als RootController.
nur mal so als Beispiel.
Ich bitte Euch da mal echt um Hilfe. Das Umbauen mit nem ausgelagerten Parser und dem Downloader der Iconview und so weiter ist eigentlich nicht das Problem nur dass ich da eben auch eine TabnavigationContoller habe und da die Appdelegate der falsche Platz zum einbinden des anderen Controllers der falsche Paltz ist... Also wo dann rein damit...??
Hier mal mein code:
Code:
//
// EventViewController.m
// xxxx
//
// Created by xxx
// Copyright 2011 __MyCompanyName__. All rights reserved.
//
#import "EventViewController.h"
#import "EventDetailViewController.h"
//#import "Resizing.h"
@implementation EventViewController
@synthesize EventTable;
@synthesize currentElement, currentTitle, currentSubTitle, currentDetail, currentDate, currentThumb, currentImg;
@synthesize eventParser;
@synthesize Events;
@synthesize event;
#pragma mark -
#pragma mark View lifecycle
/*
- (void)viewDidLoad {
[super viewDidLoad];
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
}
*/
/*
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
}
*/
- (void)viewDidAppear:(BOOL)animated {
if([Events count]==0){
NSString * path = @"http://www.xxx.de/export/events.xml";
[self parseXMLFileAtURL:path];
self.navigationItem.title = @"Events";
self.view.backgroundColor = [[[UIColor alloc] initWithPatternImage: [UIImage imageNamed:@"xxx_bg02.png"]]autorelease];
}
[super viewDidAppear:animated];
}
- (void)parseXMLFileAtURL:(NSString *)URL{
Events = [[NSMutableArray alloc] init];
NSURL *xmlURL = [NSURL URLWithString:URL];
eventParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL];
[eventParser setDelegate:self];
[eventParser setShouldProcessNamespaces:NO];
[eventParser setShouldReportNamespacePrefixes:NO];
[eventParser setShouldResolveExternalEntities:NO];
[eventParser parse];
[eventParser release];
}
- (void)parser:(NSXMLParser *)parser parseErrorOccured:(NSError *)parseError{
NSString *errorString = [NSString stringWithFormat:@"Keine Videos verfügbar(ErrorCode %i)",[parseError code]];
NSLog(@"Error parsing XML:%@", errorString);
UIAlertView * errorAlert = [[UIAlertView alloc]initWithTitle:@"Error loading content" message:errorString delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[errorAlert show];
[errorAlert release];
}
- (void)parserDidStartDocument:(NSXMLParser *)parser{
NSLog(@"Starte Parsing");
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:
(NSString *)qName attributes:(NSDictionary *)attributeDict{
currentElement = [elementName copy];
if ([elementName isEqualToString:@"event"]){
event =[[NSMutableDictionary alloc]init];
currentTitle = [[NSMutableString alloc]init];
currentDate = [[NSMutableString alloc]init];
currentSubTitle = [[NSMutableString alloc]init];
currentDetail = [[NSMutableString alloc]init];
currentThumb = [[NSMutableString alloc]init];
currentImg = [[NSMutableString alloc]init];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if ([currentElement isEqualToString:@"etitle"]){
[currentTitle appendString:string];
}
else if ([currentElement isEqualToString:@"esubtitle"]){
[currentSubTitle appendString:string];
}
else if ([currentElement isEqualToString:@"edetail"]){
[currentDetail appendString:string];
}
else if ([currentElement isEqualToString:@"thumbimg"]){
[currentThumb appendString:string];
}
else if ([currentElement isEqualToString:@"img"]){
[currentImg appendString:string];
}
else if ([currentElement isEqualToString:@"edate"]){
[currentDate appendString:string];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if ([elementName isEqualToString:@"event"]){
[event setObject:currentTitle forKey:@"etitle"];
[event setObject:currentSubTitle forKey:@"esubtitle"];
[event setObject:currentDetail forKey:@"edetail"];
[event setObject:currentDate forKey:@"edate"];
[event setObject:currentThumb forKey:@"thumbimg"];
[event setObject:currentImg forKey:@"img"];
[Events addObject:[event copy]];
NSLog(@"Hinzufügen einer nachricht %@",currentTitle);
[event release];
}
}
- (void)parserDidEndDocument:(NSXMLParser *)parser{
NSLog(@"Parsen beendet");
NSLog(@"Anzahl eingelesener Elemente: %d", [Events count]);
[EventTable reloadData];
NSString *count = [NSString stringWithFormat:@"%i",[Events count]];
UITabBarItem *tbi =(UITabBarItem*)self.tabBarController.selectedViewController.tabBarItem;
tbi.badgeValue = count;
}
// Customize the number of sections in the table view.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [Events count];
}
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}
int storyIndex = [indexPath indexAtPosition:[indexPath length]-1];
NSString * cellText = [[Events objectAtIndex: storyIndex]objectForKey:@"edate"];
NSString * cellSub = [[Events objectAtIndex: storyIndex]objectForKey:@"etitle"];
NSString *IMG = [[Events objectAtIndex: storyIndex]objectForKey:@"thumbimg"];
NSString *myUrl = [NSString stringWithFormat:@"http://www.xxx.de/DATA/IMAGES/EVENTS/%@",IMG];
NSData *imageData = [[[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:myUrl]]autorelease];
UIImage *eImg = [[[UIImage alloc]initWithData:imageData]autorelease];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.textLabel.textColor = [UIColor whiteColor];
cell.textLabel.text = cellText;
cell.detailTextLabel.text = cellSub;
cell.imageView.image = eImg;
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *selectEvent = [NSString stringWithFormat:@"%d", indexPath.row];
NSString *detailTitle = [[Events objectAtIndex: indexPath.row]objectForKey:@"etitle"];
NSString *detailText = [[Events objectAtIndex: indexPath.row]objectForKey:@"edetail"];
NSString *dIMG = [[Events objectAtIndex: indexPath.row]objectForKey:@"img"];
NSLog(@"%@",detailText);
EventDetailViewController *fvController = [[EventDetailViewController alloc] initWithNibName:@"EventDetailViewController" bundle:[NSBundle mainBundle]];
fvController.selectEvent= selectEvent;
fvController.detailTitle = detailTitle;
fvController.detailText = detailText;
fvController.dIMG = dIMG;
[self.navigationController pushViewController:fvController animated:YES];
[fvController release];
fvController = nil;
}
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Relinquish ownership any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload {
// Relinquish ownership of anything that can be recreated in viewDidLoad or on demand.
// For example: self.myOutlet = nil;
}
- (void)dealloc {
[currentTitle release];
[currentDate release];
[currentSubTitle release];
[currentDetail release];
[currentThumb release];
[currentImg release];
[super dealloc];
}
@end
Wie krieg ich da bei dem Dingen hin. Alle Tutorials erklären das Lazyloading mit einem Eintrag in die AppDelegate. Da wird der ViewController als SubView zum Window eingebunden und als RootController.
Code:
self.viewController=[[LazyLoadTableImagesViewController alloc] initWithNibName:@"LazyLoadTableImagesViewController" bundle:nil];
// Override point for customization after application launch.
UINavigationController *rootNav=[[UINavigationController alloc] initWithRootViewController:self.viewController];
// Add the view controller's view to the window and display.
[self.window addSubview:rootNav.view];
[self.window makeKeyAndVisible];
nur mal so als Beispiel.
Ich bitte Euch da mal echt um Hilfe. Das Umbauen mit nem ausgelagerten Parser und dem Downloader der Iconview und so weiter ist eigentlich nicht das Problem nur dass ich da eben auch eine TabnavigationContoller habe und da die Appdelegate der falsche Platz zum einbinden des anderen Controllers der falsche Paltz ist... Also wo dann rein damit...??