首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSArray显示NSZombie错误

NSArray显示NSZombie错误
EN

Stack Overflow用户
提问于 2011-10-31 05:45:31
回答 1查看 410关注 0票数 2

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

基本上,在设置视图时,我将一些xml解析为一个字典数组。然后,我使用NSdictionary中的一个值设置我的表视图,这个值也用于设置按字母顺序排列的滚动条和部分标题。(这是在我创建的方法中完成的)

在该方法的末尾,我调用了self.tableView reloadData;所有内容都加载得很好,而且显示得也很好。

现在我要做的就是设置它,这样当一个单元格被选中时,我会检查cell.textlabel中的值,并将其用作谓词,一旦它找到了我想要通过委托传递给主视图的相应条目,就会根据我的字典数组进行检查。

然而,我得到了一个错误,我认为这可能是由于我的reloadData..但我不确定。这是我的谓词的样子。

代码语言:javascript
复制
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.

这是我收到的错误消息。

代码语言:javascript
复制
2011-10-31 10:43:57.333 code[5812:207] *** -[__NSArrayM filteredArrayUsingPredicate:]: message sent to deallocated instance 0x6874210

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

//.h

代码语言:javascript
复制
NSMutableArray *myDataArray;
}
@property (nonatomic, retain) NSMutableArray *myDataArray;

//.m

代码语言:javascript
复制
#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;
}

任何帮助都将不胜感激,另外,你认为我正在以正确的方式传递字典的所有价值吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-31 06:04:48

您正在使用autorelease%d数组

代码语言:javascript
复制
myDataArray = [NSMutableArray arrayWithCapacity:8];

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

代码语言:javascript
复制
self.myDataArray = [NSMutableArray arrayWithCapacity:8];

甚至更好

代码语言:javascript
复制
NSMutableArray *tmpMyDataArray = [[NSMutableArray alloc] initWithCapacity:8];
self.myDataArray = tmpMyDataArray; 
[tmpMyDataArray release]; tmpMyDataArray = nil;
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7948075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档