0

你好,我對iOS開發相對較新(如果這個問題已經解決了,提前很抱歉),我一直在這個應用程序中的子模塊用戶必須輸入每日數字數據,然後將列表顯示在tableview中。事情是我想要以MMMM yyyy格式的NSdate變量「inputDate」進行排序(例如:名爲2013年2月的部分)。但是,即使這個值是在同一個月中相同的部分進入了它不組他們(見鏈接在年底的插圖)如何通過NSDate輸入排序tableview(格式化爲MMM yyyy)

這裏有段代碼,這似乎是相關的問題:

//The Fetch result controller 

    - (NSFetchedResultsController *)fetchedResultsController 
{ 
    if (_fetchedResultsController != nil) { 
     return _fetchedResultsController; 
    } 

    // Create and configure a fetch request with the PVMessWert entity. 


NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"PVMessWert" inManagedObjectContext:self.managedObjectContext]; 
    [fetchRequest setEntity:entity]; 

    // Create the sort descriptors array. 

    NSSortDescriptor *datumsort = [[NSSortDescriptor alloc] initWithKey:@"inputDate" ascending:NO]; 


    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:datumsort, nil]; 
    [fetchRequest setSortDescriptors:sortDescriptors]; 

    // Create and initialize the fetch results controller. 


    _fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"inputDate" cacheName:@"Root"]; 
    _fetchedResultsController.delegate = self; 



    return _fetchedResultsController; 
}  

然後:titleForHeaderInSection:

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
{ 
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections]   objectAtIndex:section]; 

NSArray *objects = [sectionInfo objects]; 
NSManagedObject *managedObject = [objects objectAtIndex:0]; 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateStyle:NSDateFormatterMediumStyle]; 
[formatter setDateFormat:@"MMMM yyyy"]; 
NSDate *headerDate = (NSDate *)[managedObject valueForKey:@"inputDate"]; 
NSString *headerTitle = [formatter stringFromDate:headerDate]; 

return headerTitle; 

}

然後,Dateformatter功能:

- (NSDateFormatter *)dateFormatter 
{ 
    static NSDateFormatter *dateFormatter = nil; 
    if (dateFormatter == nil) { 
     dateFormatter = [[NSDateFormatter alloc] init]; 

     [dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 
     [dateFormatter setTimeStyle:NSDateFormatterNoStyle]; 

    } 
    return dateFormatter; 
} 

而對於問題的說明detailledListView

的一小截屏

網址:http://i.stack.imgur.com/j8Kvz.png

預先感謝您的幫助。

+0

你在'dailyvalue'排序FRC,但你不顯示它是什麼,或者出現其他任何地方使用它... – Wain

+0

啊對不起,我正在測試通過輸入「dailyvalue」進行排序,當通過「inputData」沒有工作,問題仍然存在(它應該通過managedObjectContext:self.managedObjectContext sectionNameKeyPath:@「inputData」cacheName:@「Root」 ];)我已經在那裏了。 –

回答

0

你好(抱歉寫太多了)。

我能夠通過添加一個字符串屬性(核心數據)轉換NSDates存儲的NSString解決問題的方法:

- (NSString *)dateToString { 

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateStyle:NSDateFormatterMediumStyle]; 
    [formatter setDateFormat:@"MMMM yyyy"]; 
    NSDate *headerDate = (NSDate *)[self valueForKey:@"inputDate"]; 
    NSString *headerTitle = [formatter stringFromDate:headerDate]; 
    return headerTitle; 
} 

並且其中這dateToString是關鍵路徑獲取請求。

_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"dateToString" cacheName:@"Root"]; 

希望這將是有用的人在相同的情況下

0

sectionNameKeyPath應該是一個字符串,而不是日期。一般情況下,您需要爲您的實體添加一個瞬態屬性,並將其設置爲字段版本的部分標識符(在這種情況下爲inputDate)。瞬態值將是您當前使用的字符串headerTitle,並且可以以相同方式生成。您可以使用KVO或保存管理對象時觸發它。

+0

所以你的條目都顯示在不同的部分的原因是因爲它比較NSDate對象,而不是字符串。因此,即使所有日期的字符串值相同,日期值也不是這樣,它將它們放在不同的部分。正如@wain所說,你將不得不按字符串版本進行排序,而不是日期版本。 – mrosales

+0

所以你的意思是將日期存儲爲NString屬性並將該屬性作爲sectionNameKeyPath來調用?但按月還是按字母排序呢?對不起,如果這聽起來微不足道,我不完全掌握問題的解決方案 –

+0

不,不要將字符串版本的日期存儲爲'sectionName'。將您計算的字符串存儲爲「headerTitle」。 – Wain

相關問題