//** 白名單控制需求:頁面數(shù)據(jù)拿到后,跟隱藏白名單比較,如果在隱藏白名單中則不展示
// 頁面數(shù)據(jù)(listMArray)
NSMutableArray *listMArray = [NSMutableArray arrayWithObjects:@{@"name":@"zhangSan"}, @{@"name":@"liSi"}, @{@"name":@"wangWu"}, nil];
// 隱藏白名單(hideWhiteArray)
NSArray *hideWhiteArray = @[@"liSi", @"wangWu"];
for (NSDictionary *dict in listMArray) {
if ([hideWhiteArray containsObject:dict[@"name"]]) {
[listMArray removeObject:dict];
}
}
NSLog(@"篩選后的頁面數(shù)據(jù):%@", listMArray);
// 這種方法會crash,這是因為for in遍歷的時候不能操作數(shù)據(jù)源,會報:<__NSArrayM: 0x28336f600> was mutated while being enumerated。
// 如果把遍歷后的結果放到另外一個臨時數(shù)組中,遍歷結束后再從數(shù)據(jù)源中剔除臨時數(shù)組,這樣顯得有點麻煩。
// 接下里看另外一種方法:for循環(huán)。
NSMutableArray *listMArray = [NSMutableArray arrayWithObjects:@{@"name":@"zhangSan"}, @{@"name":@"liSi"}, @{@"name":@"wangWu"}, nil];
NSArray *hideWhiteArray = @[@"liSi", @"wangWu"];
for (int i = 0; i < listMArray.count; i++) {
NSDictionary *dict = listMArray[i];
if ([hideWhiteArray containsObject:dict[@"name"]]) {
[listMArray removeObject:dict];
}
}
NSLog(@"篩選后的頁面數(shù)據(jù):%@", listMArray);
// 篩選后的數(shù)據(jù)是:@{@"name":@"zhangSan"}, @{@"name":@"wangWu"}
// emmmmmmmmmmmmmmmmmmmmmmmm
// 嗯,感覺邏輯沒有問題,但是結果,what??
// 結果不對,臥槽,好好思考一下流程.........
// 發(fā)現(xiàn)是由于數(shù)據(jù)源個數(shù)發(fā)生變化后,i角標發(fā)生跳位導致,解決方法就是在每次移除數(shù)據(jù)的時候把i減少一位即可:
NSMutableArray *listMArray = [NSMutableArray arrayWithObjects:@{@"name":@"zhangSan"}, @{@"name":@"liSi"}, @{@"name":@"wangWu"}, nil];
NSArray *hideWhiteArray = @[@"liSi", @"wangWu"];
for (int i = 0; i < listMArray.count; i++) {
NSDictionary *dict = listMArray[i];
if ([hideWhiteArray containsObject:dict[@"name"]]) {
[listMArray removeObject:dict];
i -= 1;
}
}
NSLog(@"篩選后的頁面數(shù)據(jù):%@", listMArray);
// 篩選后的數(shù)據(jù)是:@{@"name":@"zhangSan"}}
// 這樣就滿足了需求,perfect!
// 清空字符串要使用第二種正確。
NSString *str = @"";
if (str) {
NSLog(@"有值");
} else {
NSLog(@"空");
}
NSString *str = nil;
if (str) {
NSLog(@"有值");
} else {
NSLog(@"空");
}