2010-08-24 185 views
0

我有一個使用核心數據填充的UITableView & sqlite。UITableView分組部分

我想根據數據庫表中的屬性在UITableView中分組。

例如如果我在數據庫表中有一個名爲「type」的類別字段,那麼將數據分段的最佳方法是什麼?

我見過使用數組的示例,但我遇到了核心數據。所有數據當前都是從數據庫中顯示出來的,我想以某種方式將其分開。

在此先感謝。

回答

2

如果您使用的是NSFetchedResultsController來獲取你的結果和它們連接起來到你的用戶界面非常簡單。只需將initWithFetchRequest調用的sectionNameKeyPath:參數設置爲NSFetchedResultsController即可。

在這個例子中,它只是從NSFetchedResultsController的類引用中稍加修改,我已經定義了一個鍵路徑,它將使用名爲「group」的節作爲節標題。因此,如果您的數據庫中有一組的行設置爲「貓」,而其他行的組設置爲「狗」,則您的結果表視圖將包含2個部分 - 一個用於貓,一個用於狗。

NSManagedObjectContext *context = <#Managed object context#>; 
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
// Configure the request's entity, and optionally its predicate. 
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"<#Sort key#>" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 
[sortDescriptors release]; 
[sortDescriptor release]; 

NSFetchedResultsController *controller = [[NSFetchedResultsController alloc] 
     initWithFetchRequest:fetchRequest 
     managedObjectContext:context 
     sectionNameKeyPath:@"groups" 
     cacheName:@"<#Cache name#>"]; 
[fetchRequest release]; 

NSError *error; 
BOOL success = [controller performFetch:&error]; 

有關鍵路徑的更多信息,您必須搜索Xcode文檔集中的關鍵路徑文檔。但對於簡單的情況,它只是返回對象的屬性名稱。

+0

感謝您的文章,那就是我一直在尋找的。 – hanumanDev 2010-08-24 23:43:28

1

我發現一個數組在使用段時非常有用。看看我的示例代碼

好友排序(從CoreData)

NSMutableArray* unsortedFriends = [appDelegate.core.serviceManager.storageManager getFriendList]; 
for(ELMUser* user in unsortedFriends) { 
    if ([user.friendshipConfirmed boolValue]) { 
     if (![user.localDeleted boolValue]) { 
      [friendList addObject:user]; 
     } 
    } else { 
     if (![user.localDeleted boolValue]) { 
      [friendListUnconfirmed addObject:user]; 
     } 
    } 

} 

listOfItems = [[NSMutableArray alloc] init]; 


[listOfItems addObject:friendList]; 
[listOfItems addObject:friendListUnconfirmed]; 

顯示電池

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"Cell"; 

    NSMutableArray *subArray = [listOfItems objectAtIndex:indexPath.section]; 
    ELMUser* user = (ELMUser*)[subArray objectAtIndex:indexPath.row]; 

.... 
+0

感謝您的信息。非常感謝 – hanumanDev 2010-08-24 23:41:50