[英]NSPredicate not working on filtering array of CLCircularRegions
我想查看我的區域是否已經受到監視。 為此,我得到monitoredRegions
從我CLLocationManager
,然后通過其標識符一樣使用謂詞過濾器:
NSArray *regionsBeingMonitored = [_sharedLocationManager.monitoredRegions allObjects];
NSPredicate *predicateForRegionId = [NSPredicate predicateWithFormat:@"identifier == %@", store.storeID];
CLRegion *someRegion = [[regionsBeingMonitored filteredArrayUsingPredicate:predicateForRegionId] firstObject];
這是控制台的輸出:
Printing description of regionsBeingMonitored:
<__NSArrayI 0x600000280fa0>(
CLCircularRegion (identifier:'486', center:<+18.45381450,+73.79211000>, radius:100.00m),
CLCircularRegion (identifier:'466', center:<+35.54023330,-97.52949170>, radius:100.00m),
CLCircularRegion (identifier:'469', center:<+35.54023330,-97.52949170>, radius:100.00m),
CLCircularRegion (identifier:'485', center:<+18.56226900,+73.91274500>, radius:100.00m),
CLCircularRegion (identifier:'475', center:<+18.52043030,+73.85674370>, radius:100.00m),
CLCircularRegion (identifier:'468', center:<+0.00000000,+0.00000000>, radius:100.00m),
CLCircularRegion (identifier:'484', center:<+18.55905150,+73.91125600>, radius:100.00m),
CLCircularRegion (identifier:'467', center:<+35.54023330,-97.52949170>, radius:100.00m)
)
Printing description of predicateForRegionId:
identifier == 469
但是謂詞總是返回空數組。 有人可以幫忙嗎?
我已經用store.storeID
字符串常量的形式替換了store.storeID
:
NSPredicate *predicateForRegionId = [NSPredicate predicateWithFormat:@"identifier == %@", @"486"];
一切正常。 您的storeID
是一個NSNumber
。 因此,你有
predicateForRegionId的打印說明:
標識符== 469
作為輸出而不是(請注意雙引號)
predicateForRegionId的打印說明:
標識符==“ 469”
如果將數字與字符串進行比較, NSPredicate
始終提供false。 您應該將storeID
轉換為字符串:
NSPredicate *predicateForRegionId = [NSPredicate predicateWithFormat:@"identifier == %@",
[store.storeID description]];
嘗試NSPredicate *predicateForRegionId = [NSPredicate predicateWithFormat:@"%K == %@", @"identifier", store.storeID];
由於“標識符”是一個屬性,因此您需要將其作為鍵傳遞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.