【问题标题】:Filter Arrays in Objects using NSPredicate使用 NSPredicate 过滤对象中的数组
【发布时间】:2014-03-20 19:16:43
【问题描述】:

我需要通过来自另一个数组内的对象的属性来过滤数组。 假设我有两个类:

StoreList.h

@interface StoreList : NSObject {
  NSMutableArray *storesArray; //Array containing Store objects
}

商店.h

@interface Store : NSObject {
  NSString *name;
}

所以,我有一个 NSArray (storeListArray),其中包含一些 StoreList 对象。然后,我的数组是这样的:

storeListArray = [
 StoreList:{
    storesArray: {
                  stores[{
                    store: {
                     name: "Store1"
                    },
                    store: {
                     name: "Store2"
                    }
                  }]
                },
    storesArray: {
                  stores[{
                    store: {
                     name: "Store1"
                    },
                    store: {
                     name: "Store2"
                    }
                  }]
                }
   }
];

好吧,我的问题是:如何使用 NSPredicate 通过 Store 对象的“名称”属性过滤 storeListArray?

我试图做这样的事情,但这不起作用:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY storeList CONTAINS[cd] %@", filterString];
self.filteredStores = [storeListArray filteredArrayUsingPredicate:predicate];
return self.filteredStores;

感谢您的帮助!

【问题讨论】:

    标签: ios objective-c nsarray nspredicate


    【解决方案1】:

    试试这个,

    NSPredicate * predicate = [NSPredicate predicateWithFormat:@"ANY SELF.storesArray.name == %@", filterString];
    
    NSArray * videoArray = [storeListArray filteredArrayUsingPredicate:predicate];
    

    【讨论】:

      【解决方案2】:

      你有没有像下面这样尝试过,

      NSPredicate * predicate = [NSPredicate predicateWithFormat:@"name == %@", filterString];
      
      NSArray * videoArray = [storeListArray filteredArrayUsingPredicate:predicate];
      

      谢谢!

      【讨论】:

      • 是的,这是我做的第一件事。但它给了我错误:* 由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[StoreList valueForUndefinedKey:]:这个类不符合键名的键值编码。”
      • 如果 storeListArray 包含 store 对象,而不是 store 对象的数组,则上述内容将起作用。也许在循环中过滤每个子数组?还是在过滤之前展平 storeListArray?
      • @JoshuaKaden 我尝试执行循环,但无法返回过滤后的列表。你能给我一些使用扁平化的例子吗?
      猜你喜欢
      • 1970-01-01
      • 2017-09-20
      • 1970-01-01
      • 1970-01-01
      • 2012-05-17
      • 2013-06-18
      • 2017-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多