我尝试将单个数组对象(即包含多个值的nsdictionary )传递回我的主视图。
基本上,在设置视图时,我将一些xml解析为一个字典数组。然后,我使用NSdictionary中的一个值设置我的表视图,这个值也用于设置按字母顺序排列的滚动条和部分标题。(这是在我创建的方法中完成的)
在该方法的末尾,我调用了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 0x6874210myDataArray是在NSXMLParser委托中创建的,如下所示。
//.h
NSMutableArray *myDataArray;
}
@property (nonatomic, retain) NSMutableArray *myDataArray;//.m
#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;
}任何帮助都将不胜感激,另外,你认为我正在以正确的方式传递字典的所有价值吗?
发布于 2011-10-31 06:04:48
您正在使用autorelease%d数组
myDataArray = [NSMutableArray arrayWithCapacity:8];您已经设置了属性,因此请使用它们,例如
self.myDataArray = [NSMutableArray arrayWithCapacity:8];甚至更好
NSMutableArray *tmpMyDataArray = [[NSMutableArray alloc] initWithCapacity:8];
self.myDataArray = tmpMyDataArray;
[tmpMyDataArray release]; tmpMyDataArray = nil;https://stackoverflow.com/questions/7948075
复制相似问题