-1

私は5つのスクリーンを持っています。各画面には、ユーザーが選択したオプション、つまり時刻と日付のピッカー、およびユーザーが入力するいくつかの UIFields があります。そのため、1 つのエンティティを作成し、すべての属性 (25) を追加しました。LM という NSObjectSubClass を作成しました

各シーンで、次のことを行っています。

@property (nonatomic, strong) LM *lMData;

NSString *date = [[NSString alloc] initWithFormat:@"%@", [dateFormatter stringFromDate:selectedDate]];
            DateLabel.text = date;
            self.lMData.dateLabel = date;

self.lmData.nameField5 = UITextFieldName5.text;

User Segue が次の画面に移動する前に、次のことを行います。

NSError *error;
NSManagedObjectContext *context = self.managedObjectContext;

 if (![context save:&error])
      {
           NSLog(@"There was an error in Save:%@",error);
      }

フェッチするには、カスタムの UITableViewController でデータを表示するだけです。これには 12 のセクションがあり、各セクションに 2 つのセルが表示されます。並べ替えは特に必要ありません。セルが正しいセクションに表示されるようにしたいだけです。

取得するには、次の方法があります。

-(NSFetchedResultsController *) fetchResultsController
{
    if (_fetchResultsController !=nil)
{
    return _fetchResultsController;
}

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

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"startTimeLabel" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];

_fetchResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil];

return _fetchResultsController;

}

私が読んだことから、フェッチするにはソートする必要があるようです。つまり、次の行です。

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"startTimeLabel"

私のエンティティには「startTimeLabel」という属性があります。しかし、私はソートを余儀なくされているので、そこに持っています。しかし、私は本当にソートする必要はありません。

この時点では何も表示されていません。

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

  return [[self.fetchResultsController sections] count];   //I need 10 sections here;
}

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

    id<NSFetchedResultsSectionInfo> secInfo = [[self.fetchResultsController   sections]objectAtIndex:section];
    return [secInfo numberOfObjects]; //I need 2 rows in each section here
}

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

    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    LM *letsMeetData = [self.fetchResultsController objectAtIndexPath:indexPath];
    cell.textLabel.text = letsMeetData.dateLabel;

    return cell;
}

質問:

  1. 保存して取得するコードは正しいですか?

  2. ソートを取り除くにはどうすればよいですか? ソートする必要はありません。

  3. 取得したデータを UITableView に表示するコードが間違っていることはわかっています。お知らせ下さい。

  4. 最後に、これらの各フォームをオブジェクトとして保存して、ユーザーが後でそれらを取得できるようにする必要もあります。LM オブジェクトを格納するために別のエンティティを作成する必要がありますか?

ありがとう

4

1 に答える 1

0

NSManagedObject から Entity クラスを作成するために必要なコアデータを使用するには、どうすればよいでしょうか。

(1)エンティティクラスを使用して、データの保存と取得ができます。

LM_Entity *lm = [NSEntityDescription insertNewObjectForEntityForName:@"LM_Entity" inManagedObjectContext:self.managedObjectContext];
//Your code
lm.nameField5 = UITextFieldName5.text;
//Now save
[self.managedObjectContext save:&error];

使用を検索しながら

NSEntityDescription *entity = [NSEntityDescription entityForName:@"LM_Entity"
                                      inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];

(2) NSFetchedResultsControllerを操作する際に、ソート記述子を指定する必要があります。

(3)あなたのコードは、取得したデータを表示するために正しいです

(4) はい、データを保存および取得するための Entity クラスを作成する必要があります (1 を参照)。

coredata の詳細については、このチュートリアルに従ってください。

于 2013-02-11T05:15:23.993 に答える