滚动时UITableView损坏

时间:2009-10-20 15:40:50

标签: iphone objective-c uitableview nsmutablearray

我试图让UITableView显示数组中包含的项目。 该数组包含在一个类(HX_ParkingSearch)中。

我有一个包含app delegate类内部数组的类的引用,以使视图能够访问它。 问题是我在tableview中正确显示了一页结果 但当我尝试向下滚动时,尝试访问数组中的下一个项目时发生异常。 事实证明,当我向下滚动并且cellForRowAtIndexPath方法触发时, 数组中的项目无效,似乎已被释放,但我不知道在哪里 他们正在被释放!

有没有人有任何想法,因为这真的是我现在正在做的事情!

非常感谢, 克里斯。

//自定义表格视图单元格的外观。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";
    HX_ParkingLocation *location;
    bookingApp2AppDelegate *del  = (bookingApp2AppDelegate *) [[UIApplication sharedApplication] delegate];   


    NSMutableArray* array = [del.parkingSearch locations];

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }


    location = (HX_ParkingLocation*) [array objectAtIndex: [indexPath row] ];




    return cell;
}




#import <Foundation/Foundation.h>


@interface HX_ParkingLocation : NSObject
{


    NSString *name;


}


@property(retain,nonatomic) NSString* name;


/*
 Initialises this Location instance by passing in the name and code of the location and the URL of the webapi product endpoint.
 The URL is used to find available products at this location.
 */
-(id) initWithName: (NSString*) n;

@end


#import <Foundation/Foundation.h>


@interface HX_ParkingSearch : NSObject 
{
    NSMutableArray* locations;

}
@property (retain) NSMutableArray* locations;


-(BOOL) loadLocations;

@end


#import "HX_ParkingSearch.h"
#import "HX_Parking_Location.h"



@implementation HX_ParkingSearch
@synthesize locations;

//Finds the locations
-(BOOL) loadLocations
{   


    [locations release];
    //Create array to hold locations
    locations = [[NSMutableArray alloc] initWithCapacity:30];

    //Loop through all returned locations
    for(int i=0;i<15;i++)
    {
        //Get location name
        NSString* n = [NSString stringWithFormat:@"Item #%i",i ];



        //Create location instance, which retrieves availability and product information and stores the information in location object.
        HX_ParkingLocation* location = [[HX_ParkingLocation alloc] initWithName:n];
        //add to array
        [locations addObject:location];




    }


    return YES;

}



@end



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

@interface bookingApp2AppDelegate : NSObject <UIApplicationDelegate> {

    UIWindow *window;
    UINavigationController *navigationController;
     HX_ParkingSearch *parkingSearch;

}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
@property (retain) HX_ParkingSearch *parkingSearch;


@end

@implementation bookingApp2AppDelegate

@synthesize window;
@synthesize navigationController;
@synthesize parkingSearch;


- (void)applicationDidFinishLaunching:(UIApplication *)application 
{


    //Create new parking search instance by specifying the endpoint urls
    HX_ParkingSearch* search = [[HX_ParkingSearch alloc] init];
    [search loadLocations];

    parkingSearch = search;
    //NSLog(@"Search Retain count = %i" ,[search retainCount]);




    [window addSubview:[navigationController view]];
    //[window addSubview:[navigationController initWithNibName:@"VC_Locations" bundle:[NSBundle mainBundle]]];
    [window makeKeyAndVisible];

}

2 个答案:

答案 0 :(得分:0)

您是否有理由在loadLocations中初始化容量为30的阵列,但只插入15个项目?

答案 1 :(得分:0)

此方法对您的数据源有何影响?:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

还有:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

tableview可能只是试图抓住一个超出位置范围的索引