【问题标题】:NSMutableArray losing dataNSMutableArray 丢失数据
【发布时间】:2013-01-28 08:50:41
【问题描述】:

我已经为NSMutableArray 创建了一个属性,并且在为其赋值时我编写了以下代码

[self setTotalCells:[[NSMutableArray alloc] initWithArray:[jsonDictionary valueForKey:@"data"]]];

我在搜索栏方法中使用它。但是,一旦我使用了该属性,数组就会变空。

cells = [[NSMutableArray alloc]init];
NSLog(@"filterContentForSearchText");
NSLog(@"**************************************************************");
if ([totalCells count]<= 0) {
    totalCells = [_jsonPropertiesDictionary valueForKey:@"data"];
}
NSLog(@"%@",totalCells);
NSLog(@"**************************************************************");
for (id cell in totalCells)
{
    NSLog(@"bedrooms : %@",[cell valueForKey:@"BEDROOMS"]);
    NSLog(@"DISPLAY_ADDRESS : %@",[cell valueForKey:@"DISPLAY_ADDRESS"]);
    NSLog(@"PRICE : %@",[cell valueForKey:@"PRICE"]);
    NSLog(@"searchText : %@",searchText);
    NSComparisonResult result = NSOrderedAscending;
    if ([[cell valueForKey:@"BEDROOMS"] isKindOfClass:[NSString class]] && [[cell valueForKey:@"BEDROOMS"] length] > 0) {
        result = [[cell valueForKey:@"BEDROOMS"] compare:searchText options:(NSCaseInsensitiveSearch) range:NSMakeRange(0, [searchText length])];

        if (result == NSOrderedSame)
            [self.filteredListContent addObject:cell];
    }
    if ([[cell valueForKey:@"DISPLAY_ADDRESS"] isKindOfClass:[NSString class]] && [cell valueForKey:@"DISPLAY_ADDRESS"] != nil && [cell valueForKey:@"DISPLAY_ADDRESS"] != @"" && [[cell valueForKey:@"DISPLAY_ADDRESS"] length] > 0) {
        result = [[cell valueForKey:@"DISPLAY_ADDRESS"] compare:searchText options:(NSCaseInsensitiveSearch) range:NSMakeRange(0, [searchText length])];

        if (result == NSOrderedSame)
            [self.filteredListContent addObject:cell];
    }
    if ([[cell valueForKey:@"PRICE"] isKindOfClass:[NSString class]] && [cell valueForKey:@"PRICE"] != nil && [[cell valueForKey:@"PRICE"] length] > 0) {
        result = [[cell valueForKey:@"PRICE"] compare:searchText options:(NSCaseInsensitiveSearch) range:NSMakeRange(0, [searchText length])];

        if (result == NSOrderedSame)
            [self.filteredListContent addObject:cell];
    }
    if ([searchText isEqualToString:@"" ]) {
        filteredListContent = totalCells;
        break;
    }
}
if (self.filteredListContent.count > 0) {
    cells = self.filteredListContent;//added by prajakta
}

[self.propertyList_table reloadData];
NSLog(@"filteredListContent : %@ ",filteredListContent);

我已将此属性声明为

@property(atomic,retain)NSMutableArray *totalCells;

任何帮助将不胜感激

【问题讨论】:

  • ...你的问题是什么?
  • 问题是经过一次迭代后,我在 totalcells 中没有得到任何值
  • 你的搜索方法很有趣,为什么不尝试使用-filteredArrayUsingPredicate: 方法过滤NSArray?它根本不会弄乱您的原始数据源。此外,您的代码片段并没有给我们太多信息。它到底在哪里运行?
  • 我的搜索方法只有那个代码。你想知道什么?因此我将编辑我的问题。
  • 我建议您在访问值时使用 self.totalCells

标签: iphone ios ios5 ios6


【解决方案1】:

你为什么不用这种方式过滤呢?它不会破坏您的原始数据源...

cells = [[NSMutableArray alloc]init];
NSLog(@"filterContentForSearchText");
NSLog(@"**************************************************************");
if ([totalCells count]<= 0) {
    totalCells = [_jsonPropertiesDictionary valueForKey:@"data"];
}
NSLog(@"%@",totalCells);
NSLog(@"**************************************************************");

/*
 * replace your code FROM here...
 */

NSArray *filteredCells = [totalCells filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
    NSDictionary *cell = (NSDictionary *)evaluatedObject;
    if ([[cell valueForKey:@"BEDROOMS"] isKindOfClass:[NSString class]] && [[cell valueForKey:@"BEDROOMS"] length] > 0) {
        return [[cell valueForKey:@"BEDROOMS"] compare:searchText options:(NSCaseInsensitiveSearch) range:NSMakeRange(0, [searchText length])];
    }
    if ([[cell valueForKey:@"DISPLAY_ADDRESS"] isKindOfClass:[NSString class]] && [cell valueForKey:@"DISPLAY_ADDRESS"] != nil && [cell valueForKey:@"DISPLAY_ADDRESS"] != @"" && [[cell valueForKey:@"DISPLAY_ADDRESS"] length] > 0) {
        return [[cell valueForKey:@"DISPLAY_ADDRESS"] compare:searchText options:(NSCaseInsensitiveSearch) range:NSMakeRange(0, [searchText length])];
    }
    if ([[cell valueForKey:@"PRICE"] isKindOfClass:[NSString class]] && [cell valueForKey:@"PRICE"] != nil && [[cell valueForKey:@"PRICE"] length] > 0) {
        return [[cell valueForKey:@"PRICE"] compare:searchText options:(NSCaseInsensitiveSearch) range:NSMakeRange(0, [searchText length])];
    }
    return FALSE;
}]];

/*
 * TO here...
 */

if (self.filteredListContent.count > 0) {
    cells = self.filteredListContent;//added by prajakta
}

[self.propertyList_table reloadData];
NSLog(@"filteredListContent : %@ ",filteredListContent);

【讨论】:

  • 感谢 Holex。我一定会试试这个。
  • 我不太确定您是如何以及在何处丢失了原始NSArray 的内容,您提供的代码片段似乎并不重要,但如果您真的丢失了数据,它可能会有一些.. .
猜你喜欢
  • 1970-01-01
  • 2016-03-03
  • 2014-04-02
  • 2016-07-05
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多