物体释放问题

问题描述

| 我有3个层次结构的导航应用程序。我的第一级是表格视图控制器。该控制器的nib文件为\“ TableView \”。我在这里有问题。我的代码是这样的: RootViewController
#import \"RootViewController.h\"
#import \"SubCategory.h\"
#import \"OffersViewController.h\"

@implementation RootViewController

@synthesize subCategories;
@synthesize offersView;

- (void)dealloc
{
    NSLog(@\"root dealloc\");
    //[subCategories release];
    [super dealloc];
}

- (void)viewDidLoad
{
    NSLog(@\"root view load\");
    [super viewDidLoad];
    self.title  = @\"Sub Categories\";

    NSString *jsonArray = [NSString stringWithFormat:@\"{ \"
                       @\" \\\"sub-categories\\\": { \"
                       @\" \\\"parent\\\": \\\"1\\\",\"
                       @\" \\\"count\\\": \\\"2\\\",\"
                       @\" \\\"sub-category\\\": [{ \"
                       @\" \\\"id\\\": \\\"1\\\",\"
                       @\" \\\"name\\\": \\\"Buy\\\" \"
                       @\" },\"
                       @\" { \"
                       @\" \\\"id\\\": \\\"2\\\",\"
                       @\" \\\"name\\\": \\\"Sell\\\" \"
                       @\" }] \"
                       @\" } \"
                       @\" }\"];

    SubCategory* categories = [[SubCategory alloc] init];
    subCategories = categories;
    [subCategories parseJSON:jsonArray];
}


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{
    NSLog(@\"root sections\");
return 1;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{
    NSLog(@\"root numberOfRows\");
return [subCategories.subCategoryName count];
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    NSLog(@\"root didSelectRow\");
    OffersViewController * offers = [[OffersViewController alloc]    initWithNibName:@\"OffersView\" bundle:nil];

    offersView = offers;
    // I have exception on this row. exception is:
    //-[__NSArrayI objectAtIndex:]: message sent to deallocated instance 0x4b04c00
    offersView.title = [NSString stringWithFormat:@\"%@\",[subCategories.subCategoryName objectAtIndex:indexPath.row]];

    [self.navigationController pushViewController:offersView animated:YES];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    NSLog(@\"root cellForRow\");
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@\"cachedCell\"];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] init] autorelease];
    }

    cell.textLabel.text = [subCategories.subCategoryName objectAtIndex:indexPath.row];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

return cell;
}

@end
子类别
#import \"SubCategory.h\"
#import \"JSON.h\"

@implementation SubCategory

@synthesize parentId;
@synthesize count;
@synthesize subCategoryId;
@synthesize subCategoryName;


- (void) parseJSON: (NSString*) jsonArray {
     NSDictionary *results = [jsonArray JSONValue];

    NSString *parent = (NSString*) [[results objectForKey:@\"sub-categories\"] objectForKey:@\"parent\"];
    parentId = [parent intValue];

    NSString *cnt = (NSString*) [[results objectForKey:@\"sub-categories\"] objectForKey:@\"count\"];
    self.count = [cnt intValue];

    NSDictionary *subCategories = [[results objectForKey:@\"sub-categories\"] objectForKey:@\"sub-category\"];


    NSMutableArray *namesArray = [[NSMutableArray alloc] initWithCapacity:[subCategories count]];
    NSMutableArray* idArray = [[NSMutableArray alloc] initWithCapacity:[subCategories count]];

    for (NSDictionary *subCategory in subCategories) {        
        [idArray addObject:[subCategory objectForKey:@\"id\"]];
        [namesArray addObject:[subCategory objectForKey:@\"name\"]];
    }

    subCategoryId = [NSArray arrayWithArray:idArray];
    subCategoryName = [NSArray arrayWithArray:namesArray];

    [idArray release];
    [namesArray release];
//[parent release];
//[cnt release];
}

@end
我不知道为什么释放我的对象。有人能帮我吗。 编辑:添加了子类别代码     

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)