2014-11-24 19 views
-1

我是Objective-C編碼中的Begginer,我需要一些NSPredicates的幫助。NSPredicate生成空數組的字典數組

我需要過濾(由id_especie)我從一個Json文件解析並檢索數據到另一個數組的字典數組。不幸的是我得到的是一個空數組;

這是我的字典的數組(id_especie意味着species_id和id_raca意味着breed_id):

{ 
    "id_especie" = 1; 
    "id_raca" = 1; 
    raca = Afghanhound; 
}, 
    { 
    "id_especie" = 1; 
    "id_raca" = 2; 
    raca = "Airedale Terrier"; 
}, 
    { 
    "id_especie" = 1; 
    "id_raca" = 3; 
    raca = Akita; 
},..., 
    { 
    "id_especie" = 2; 
    "id_raca" = 47; 
    raca = "N/I"; 
}, 
    { 
    "id_especie" = 2; 
    "id_raca" = 48; 
    raca = Siames; 
}, 
    { 
    "id_especie" = 3; 
    "id_raca" = 49; 
    raca = Periquito; 
}, 
    { 
    "id_especie" = 4; 
    "id_raca" = 50; 
    raca = Cobra; 
}, 
    { 
    "id_especie" = 4; 
    "id_raca" = 51; 
    raca = Lagarto; 
}, 
    { 
    "id_especie" = 5; 
    "id_raca" = 52; 
    raca = "Furao"; 
}, 
    { 
    "id_especie" = 5; 
    "id_raca" = 53; 
    raca = Hamster; 
}, 
    { 
    "id_especie" = 6; 
    "id_raca" = 54; 
    raca = Outros; 
} 

這是我的代碼:

.H

@property (nonatomic, strong) NSMutableArray *arrayBreedAndSpecies; 
@property (nonatomic, strong) NSArray *filteredArray; //edited 

.M

NSError *errorLoad = nil; 
NSURL *jsonUrl = [[NSURL alloc]initWithString:@"http://marcosdegni.com.br/petsistema/teste/raca.php"]; 
NSString *jsonString = [NSString stringWithContentsOfURL:jsonUrl encoding:NSUTF8StringEncoding error:&errorLoad]; 

if (!errorLoad) { 
    NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; 
    NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:nil]; 
    self.arrayBreedAndSpecies = [[NSMutableArray alloc] initWithArray:jsonArray]; 
} 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%@ = %@",@"id_especie", @"2"]; 
[self.filteredArray setArray: [self.arrayBreedAndSpecies filteredArrayUsingPredicate:predicate]]; 
NSLog(@"Filter: %@", self.filteredArray); 
+0

清楚,是你的字典的描述,如果我想嘗試瑞普你的問題,我將不得不重構你的字典。 .. – 2014-11-24 14:29:40

+0

你好格雷迪,謝謝你的時間......請在http://marcosdegni.com.br/petsistema/teste/raca.php找到完整的字典「。如果你將整個代碼複製到一個iOS項目,你會將它裝載爲arrayBreedAndSprecies ... tks – 2014-11-24 14:33:06

+0

謂詞必須用'@ K'格式化。 – holex 2014-11-24 15:47:08

回答

0

好,我已經注意到了一些錯誤與NSPredicate代碼:

1)謂詞的動態關鍵路徑應該是%K沒有%@

2)如要檢查數值等於另一個需要使用==不僅僅是=

因此代碼的最後部分應該是:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K == %i",@"id_especie", 2]; 
self.filteredArray = [NSArray arrayWithArray:[self.arrayBreedAndSpecies filteredArrayUsingPredicate:predicate]]; 
NSLog(@"Filter: %@", self.filteredArray); 

我假設這裏id_especie屬性是一個數字值。如果它是一個字符串值,你可以使用斷言:[NSPredicate predicateWithFormat:@"%K MATCHES[cd] %@", @"id_especie", @"2"];

希望這有助於

+0

id_especie是一個字符串值。 !謝謝 – 2014-11-24 15:47:43

+0

很高興我能幫幫我 – 2014-11-24 15:58:29

0

只是一個猜測在這裏,因爲這裏不是一個工作代碼示例:

[self.filteredArray setArray: [self.arrayBreedAndSpecies filteredArrayUsingPredicate:predicate]]; 

如果self.filteredArray是零,該行不會做任何事......我敢打賭,你真正的意思:

self.filteredArray = [self.arrayBreedAndSpecies filteredArrayUsingPredicate:predicate]; 
+0

再次問好。現在我得到一個空數組。 – 2014-11-24 14:42:27