2013-08-21 100 views
0

我已經從Core Data檢索以下Array核心數據表的NSArray

NSArray *dataArray = [context executeFetchRequest:request error:&error]; 

所以我寫了這個代碼單獨獲取每一行數據發送到REST API:

for (NSString *str in dataArray) { 

     NSString *name =[dataArray valueForKey:@"name"]; 
     NSString *dob = [dataArray valueForKey:@"dob"]; 
     int gender =[[dataArray valueForKey:@"gender"]integerValue]; 
     NSString *childId =[dataArray valueForKey:@"id"]; 

     int response = [network sendName:name withDateOfBirth:dob andGender:gender forID:childId]; 

     if (response == 200) { 
      // [self performSelectorOnMainThread:@selector(postSuccess) withObject:nil waitUntilDone:YES]; 
      NSLog(@"Success"); 

     } 
    } 

但它不工作,因爲我不知道如何將數據存儲在陣列中的每個索引! 請幫忙,如果我沒有正確地做到這一點,請告訴我一個更好的方法來做到這一點。

謝謝。

回答

1
NSString *name =[dataArray valueForKey:@"name"]; 

這不會做你認爲它會做的事。 valueForKey:發送到數組時,返回與數組中所有項的給定鍵相對應的值的數組。因此,儘管事實上您宣稱nameNSString,該行將爲dataArray中的所有項目分配一個「名稱」值數組。後續行也一樣。

你可能要代替的是:

for (NSManagedObject *item in dataArray) { 
    NSString *name = [item valueForKey:@"name"]; 
    ... 

更好,如果你有一個NSManagedObject子類 - 讓我們把它Person代表您請求的實體,你可以說:

for (Person *person in dataArray) { 
    NSString *name = person.name; 
    ... 

這導致更簡單的版本:

for (Person *person in dataArray) { 
    int response = [network sendName:person.name 
        withDateOfBirth:person.dob 
          andGender:person.gender 
           forID:person.id]; 

雖然我會改變那個方法的名字以排除連詞和介詞。 -sendName:dateOfBirth:gender:id:就足夠了,你不需要「with」,「and」和「for」。

+0

它會不工作,應用程序崩潰在這條線 (NSManagedObject *項在dataArray中){} – Atrash

+0

@MKAlatrash「它崩潰」根本沒有任何幫助。爲什麼會崩潰?控制檯中顯示什麼信息?你的崩潰日誌說什麼? dataArray是一個有效的數組嗎?它包含什麼?你從'-executeFetchRequest:error:'返回錯誤嗎? – Caleb

+0

繼承人什麼日誌說: - [_ PFArray countByEnumeratingWithState:對象:伯爵:]: – Atrash