2011-07-04 5 views
2

私はコインアプリで働いています。コインは、コアデータによって管理されるテーブルビューでユーザーに提示されます。誰かが私のコアデータ名属性の最初の4文字をテーブルインデックスにする方法を知っていますか?

すべてのコイン名は「19」または「20」で始まります。テーブルビューでセクションインデックスを実装すると、インデックスに "1"と "2"しか表示されません。 "1"を押すとテーブルが "1900"コインに移動し、 "2"を押すと "2000"コインに移動します。私はなぜそれが、名前欄の最初の桁から来ているのか知っています。

「1910」、「1920」、「1930」などがありますので、ユーザーは10年にジャンプできます。

"titleForSection"という属性をモデルに追加し、 "1910"、 "1920"などを入力し、フェッチ要求セットでsectionNameKeyPathをmy @ "titleForSection"属性に設定しました。言うまでもなく、動作しません。

誰かがセクションインデックスをname属性の最初の4桁にする方法を知っていますか?

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 

    return [[fetchedResultsController sections] count]; 
} 


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 

    if (self.searchIsActive) { 
     return [self.filteredListContent count]; 
    } 

    NSInteger numberOfRows = 0; 

    if ([[fetchedResultsController sections] count] > 0) { 
     id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section]; 
     numberOfRows = [sectionInfo numberOfObjects]; 
    } 

    return numberOfRows; 

} 



//for index 
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView { 

    return [fetchedResultsController sectionIndexTitles]; 

} 


- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index { 

    return [fetchedResultsController sectionForSectionIndexTitle:title atIndex:index]; 
} 

- (NSFetchedResultsController *)fetchedResultsController { 

    if (fetchedResultsController != nil) { 
     return fetchedResultsController; 

    } 

    // Create the fetch request for the entity. 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 

    // Edit the entity name as appropriate. 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Coins" inManagedObjectContext:managedObjectContext]; 
    [fetchRequest setEntity:entity]; 

    //set batch size 
    [fetchRequest setFetchBatchSize:20]; 

    // Edit the sort key as appropriate. 
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sortOrder" ascending:YES]; 
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 

    [fetchRequest setSortDescriptors:sortDescriptors]; 

    // Edit the section name key path and cache name if appropriate. 
    // nil for section name key path means "no sections". 
    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"titleForSection" cacheName:nil]; 
    aFetchedResultsController.delegate = self; 
    self.fetchedResultsController = aFetchedResultsController; 

    [aFetchedResultsController release]; 
    [fetchRequest release]; 
    [sortDescriptor release]; 
    [sortDescriptors release]; 

    return fetchedResultsController; 
} 

UPDATE:

私は十年で、2010年にすべての方法を数値に文字列から私の「titleForSection」属性を変更し、その後1900年からデータベースを読み込ま。今私のテーブルのインデックスは、 "0"、 "1"、 "2"としか表示されません。なぜ私はそこに番号を置くことができないのか分かりません!

答えて

0

あなたはこのような何かしてみてください、のUITableViewControllerで– sectionIndexTitlesForTableView:をオーバーライドする必要があります。

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView { 
    NSMutableArray *array = [[NSMutableArray alloc] init]; 
    [array addObject:@"1920"]; 
    [array addObject:@"1930"]; 
    [array addObject:@"1940"]; 
    [array addObject:@"1950"]; 
    [array addObject:@"1960"]; 
    [array addObject:@"1970"]; 

    return array; 
} 

あなたが興味可能な第2の方法:

– tableView:sectionForSectionIndexTitle:atIndex: 
+0

ええ、インデックスが押されたときにテーブルが1940にどのようにジャンプするのを知っていますか?何が彼らを「ラインアップ」にするのでしょうか? – RyeMAC3

+0

この配列の最初のオブジェクトは、最初の行、2番目から2番目、3番目から3番目などにジャンプします。この配列が小さすぎると、最後の行にジャンプすることはできません。 – alhcr

+0

はい、この表には350レコードあります。だから私はそうしたくない。また、ユーザーが行を削除すると、これがウィンドウの外に出ます。 – RyeMAC3

0

ちょうどあなたのコインのクラスに新しいMethodeのを作成します。

-(NSString*)firstFourCharsOfTitle 
{ 
    return [[self titleForSection] substringToIndex:4]; 
} 

"sectionNameKeyPath" iのメソッドを使用するよりもn NSFetchedResultsController init

NSFetchedResultsController *aFetchedResultsController = 
    [[NSFetchedResultsController alloc] 
      initWithFetchRequest:fetchRequest 
      managedObjectContext:managedObjectContext 
      sectionNameKeyPath:@"firstFourCharsOfTitle" 
         cacheName:nil]; 
関連する問題