2011-01-23 130 views
3

我剛開始使用iOS編程,非常感謝您提前給予的耐心和幫助。 我是一個具有名爲「value」的屬性(float)的實體「Expense」。我有一個tableView填充形式coreData與NSFetchedResultsController。 我試圖在標籤(或表頭)中顯示所有「費用」的「值」的總和,但在閱讀Apple Docs和搜索不同的論壇後,我無法實施解決方案。肯定是初學者迷失方向。 欣賞任何關於實現這個操作之王的最佳方式的跡象,或任何類似的顯示類似解決方案的代碼。首先是總結一個CoreData屬性

回答

8

。如果要計算和存儲貨幣,則應該使用Decimal(nsdecimalnumber的核心數據名稱)和NSDecimalNumber。 我使用float實現了你需要的代碼。但是你應該把它改成NSDecimalNumber。閱讀this知道爲什麼你應該這樣做

如果您想要將費用值添加到節標題,這很容易。你基本上要花費該部分中的所有對象並對其進行總結。

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
    id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section]; 
    float expense = 0; 
    for (NSManagedObject *object in [sectionInfo objects]) { 
     expense += [[object valueForKey:@"expense"] floatValue]; 
    } 
    return [NSString stringWithFormat:@"%@ [Expense: %f]", [sectionInfo name], expense]; 
} 

即使你不使用表中的部分,這將工作。但是你應該改變返回的字符串。

我認爲你應該能夠理解它。還有一個更通用的方法來做到這一點。我爲它寫了一些更詳細的內容。它在for循環中使用3行而不是1,但它完全一樣。

float expense = 0; 
for (NSManagedObject *object in [self.fetchedResultsController fetchedObjects]) { 
    NSNumber *objectExpenseNumber = [object valueForKey:@"expense"]; 
    float objectExpense = [objectExpenseNumber floatValue]; 
    expense = expense + objectExpense; 
} 
NSLog(@"Expense: %f", expense); 

不是很好解釋。

編輯:如果您使用NSDecimalNumber

NSDecimalNumber *expense = [NSDecimalNumber decimalNumberWithString:@"0"]; 
for (NSManagedObject *object in [self.fetchedResultsController fetchedObjects]) { 
    NSDecimalNumber *objectExpenseNumber = [object valueForKey:@"expense"]; 
    expense = [expense decimalNumberByAdding:objectExpenseNumber]; 
} 
NSLog(@"Expense: %@", expense); 
+0

感謝您抽出一段時間「fluchtpunkt」,並指着方式與貨幣合作,這將是代碼。良好的意見總是歡迎和採取。我的主要問題是如何計算用戶可以在TableView中插入的所有費用的「價值」的@Sum,並更準確地將其存儲爲實體「費用」的「價值」或「金額」屬性。我沒有找到一種方法來計算CoreData的一個屬性的總和。然後,我會在某處顯示「總金額」。謝謝 – Diogo 2011-01-23 19:07:19