2015-01-09 40 views
0

在我的應用程序中,我需要遍歷每個NSArray,獲取與NSArray中的密鑰'people'關聯的NSInteger,然後將它們一起添加。首先從每個NSArray檢索每個特定的NSInteger會是一個好的起點?從幾個NSArrays中檢索1個特定的密鑰並將它們加在一起

有問題的數組在控制檯中返回像這樣。

(
    "<Prayers:DDomBXIONY:(null)> {\n Anonymous = 1;\n DeviceID = 123;\n FirstName = Name;\n LastName = Name;\n Location = HI;\n PrayerWarriors = 8;\n Request = Hi;\n Title = Hi;\n UserId = RtXN6QZsgaIiPw4SjFWGtkxXx;\n dateMade = \"Jan_09_2015\";\n}" 
) 

基本上只需要從每個PrayerWarriors鍵檢索NSInteger,並將它們全部添加在一起。

(
    "<Prayers:DDomBXIONY:(null)> {\n Anonymous = 1;\n DeviceID = 123;\n FirstName = Name;\n LastName = Name;\n Location = HI;\n PrayerWarriors = 8;\n Request = Hi;\n Title = Hi;\n UserId = RtXN6QZsgaIiPw4SjFWGtkxXx;\n dateMade = \"Jan_09_2015\";\n}", 
    "<Prayers:yG7GC4bCIH:(null)> {\n Anonymous = 1;\n DeviceID = 123;\n FirstName = Name;\n LastName = Name;\n Location = bye;\n PrayerWarriors = 0;\n Request = bye;\n Title = bye;\n UserId = RtXN6QZsgaIiPw4SjFWGtkxXx;\n dateMade = \"Jan_09_2015\";\n}" 
) 
+0

NSArray中沒有使用像「人」鍵引用值,它使用索引整數。不確定你在問什麼。 – Adama 2015-01-09 23:12:30

+0

這是一個有點不同的數組,因爲它來自使用Parse的PFObject。我發佈了一個樣本。 @Adama – user717452 2015-01-09 23:16:20

+0

好吧,我不知道解析對象和東西,所以我不能給你一個答案,但也許是領導,你檢查了一些keypath方法嗎? http://nshipster.com/kvc-collection-operators/可能類似於@ unionOfObjects.people – 2015-01-09 23:20:07

回答

0

因此,如果不明確PFObject的工作原理,我會假設它就像一本字典。每個對象的

添加到單一陣列:

NSMutableArray *arrayHoldingPrayersObjects = [NSMutableArray alloc] init]; 
arrayHoldingPrayersObjects[0] = prayerObject1; 
arrayHoldingPrayersObjects[1] = prayerObject2; 
arrayHoldingPrayersObjects[2] = prayerObject3; 

等...

然後for循環之外創建一個整數變量,並通過您的對象迭代,添加了對PrayerWarrior值在每次迭代。

int totalPrayerWarriors = 0; 
for (int i = 0; i < arrayHoldingPrayersObjects.count; i++) 
{ 
    NSMutableDictionary *prayerObject = arrayHoldingPrayersObjects[i]; 
    totalPrayerWarriors += [prayerObject objectForKey:@"PrayerWarriors"] intValue]; 
} 

您應該最終從所有數組中得到正確的總和。做一些測試,以確保它對你來說是準確的。希望這可以幫助。

*編輯

你得到錯誤表明,它實際上是一個NSMutableArray的,你不能使用像objectForKey方法來訪問,所以......必須有由PFObject提供了一種方法,可以讓你要做到這一點。或者,如果PrayerWarriors在數組中是可靠的第[5]個值(包括0),那麼您可以通過索引訪問它。

替換行:

NSMutableDictionary *prayerObject = arrayHoldingPrayersObjects[i]; 
totalPrayerWarriors += [prayerObject objectForKey:@"PrayerWarriors"] intValue]; 

NSMutableArray *prayerObject = arrayHoldingPrayersObjects[i]; 
totalPrayerWarriors += prayerObject[5]; 
+0

NSMutableDictionary工作,我得到的一切的字典,但它在下一行發生錯誤[[__NSArrayM objectForKey:]:無法識別的選擇器發送到實例' – user717452 2015-01-09 23:42:57

+0

我會編輯的東西,你可以嘗試... – Adama 2015-01-09 23:43:57

+0

''' NSRangeException',原因:'*** - [__ NSArrayM objectAtIndex:]:索引5超越邊界[0..1]''是新錯誤 – user717452 2015-01-09 23:51:08

0

不確定其中可變數組是來自。就我所知,Parse.com總是會生成不可變數組。因此,可以說你已經檢索到與祈禱:

PFQuery *query = [PFQuery queryWithClassName:@"Prayers"]; 
[query findObjectsInBackgroundWithBlock:^(NSArray *prayers, NSError *error) { 
    // see how it's an NSArray, not mutable 
}]; 

現在,你想要的總檢索PrayerWarrior的屬性,所以...

[query findObjectsInBackgroundWithBlock:^(NSArray *prayers, NSError *error) { 
    NSInteger total = 0; 
    for (PFObject *p in prayers) { 
     NSNumber *warriorCount = p[@"PrayerWarriors"]; 
     total += [warriorCount intValue]; // notice we cannot add nsnumbers directly (we need intValue) 
    } 
    NSLog(@"total warriors = %d", total); 
}]; 
相關問題