NSArray给出NSZombie错误

时间:2011-10-30 21:45:31

标签: iphone ios uitableview nsarray nspredicate

我正在尝试将单个数组对象(即多个值的nsdictionary)传递回我的主视图。

基本上当我设置视图时,我将一些xml解析为一个字典数组。然后我使用NSdictionary中的一个值设置我的tableview,该值还用于设置字母滚动条和节标题。 (这是在我创建的方法中完成的)

在该方法结束时,我调用[self.tableView reloadData];每件事情都很完美,一切都很好。

现在我要做的就是设置它,这样当选择一个单元格时,我会检查cell.textlabel中的值,并使用它作为谓词来检查我的字典数组一旦找到相应的条目我想用我所代表的代表将该字典传递到主视图。

然而我收到一个错误,我认为可能会因为我的reloadData而发生..但我不确定。 这就是我的谓词的样子。

NSPredicate *pred = [NSPredicate predicateWithFormat:@"%K like %@",@"MANUFACTURER",cell.textLabel.text];
            NSArray *filter = [myDataArray filteredArrayUsingPredicate:pred]; //error happens here
            //check to see if the value is the correct one
            NSLog(@"My Filtered array = %@", filter);
            //once problem has been found set up the delegate here.

这是我收到的错误消息。

2011-10-31 10:43:57.333 code[5812:207] *** -[__NSArrayM filteredArrayUsingPredicate:]: message sent to deallocated instance 0x6874210

myDataArray是在NSXMLParser委托中创建的,如下所示。

//的.h

NSMutableArray *myDataArray;
}
@property (nonatomic, retain) NSMutableArray *myDataArray;

//。米

#pragma mark - Parsing lifecycle

- (void)startTheParsingProcess:(NSData *)parserData
{

    //myDataArray = [NSMutableArray arrayWithCapacity:8]; // not even sure if this is needed as its declared later on.

    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:parserData]; //parserData passed to NSXMLParser delegate which starts the parsing process 

    [parser setDelegate:self];
    [parser parse]; // starts the event-driven parsing operation.
    [parser release];
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    if([elementName isEqualToString:@"Row"])
    {
        manufactureMutableDictionary = [[NSMutableDictionary alloc] initWithDictionary:attributeDict];
    }
    if([elementName isEqualToString:@"Rows"])
    {
        myDataArray = [NSMutableArray arrayWithCapacity:8];
    }
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if([elementName isEqualToString:@"Row"])
    {
        [myDataArray addObject:manufactureMutableDictionary];
    }
    [manufactureMutableDictionary release];
    manufactureMutableDictionary = nil;
}

任何帮助都会非常感激,您是否认为我会以正确的方式传递字典的所有值?

1 个答案:

答案 0 :(得分:4)

您正在使用autorelease d阵列

myDataArray = [NSMutableArray arrayWithCapacity:8];

您已设置属性,因此请使用它们,例如

self.myDataArray = [NSMutableArray arrayWithCapacity:8];

甚至更好

NSMutableArray *tmpMyDataArray = [[NSMutableArray alloc] initWithCapacity:8];
self.myDataArray = tmpMyDataArray; 
[tmpMyDataArray release]; tmpMyDataArray = nil;