2012-01-04 22 views
0

iPhoneアプリケーションでテーブルビューを使用しています。要件は、ユーザーがその行をタップ+ホールドすると、その特定の行のデータをiPhoneコアデータまたはnsuserdefaultsに保存するダイアログボックスが表示されるように、そのテーブルビューにジェスチャーを使用する必要があるということです。iPhoneでテーブルビューから選択した行データを保存する

コアデータまたはnsuserdefaultsというデータを保存するにはどのようなオプションが最適であるかを知りたいのですが?

そして最も重要なのはどうすれば実現できますか?

私は私の意見では

ありがとう

答えて

1

私はNSUserDefaultのために10-20行以上のデータがないと確信しています。それ以外の場合は、将来縮尺することができるようにCoreDataに行く予定です。私は、セルのindexPathを取得し、下のサンプルコードに示すようにダイアログを表示するには、セル内のLongPressGestureRecognizerを使用します。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) 
    { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
     UILongPressGestureRecognizer *pressRecongnizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(tableCellPressed:)]; 
      pressRecongnizer.minimumPressDuration = 0.5f; 
      [cell addGestureRecognizer:pressRecongnizer]; 
      [pressRecongnizer release]; 
    } 
    // your cell info 
    cell.textLabel.text = @"test"; 
    return cell; 
} 

- (void)tableCellPressed:(UILongPressGestureRecognizer *)recognizer 
{ 
    // You can access to the tableview cell from the recognizer.view 
    // You can get the data directly from the cell data more or label and etc. 
    UITableViewCell *cell = (UITableViewCell *)recognizer.view; 

    // You can either get the NSIndexPath of the cell from the tableview to 
    // access the data model from you data collection. 
    NSIndexPath *indexPath = [self.tableview indexPathForCell:cell] 

    // Use the index path to get data and display dialog. 
    // For example: 
    UIAlertView *alert = [UIAlertView alloc] – initWithTitle:@"table cell pressed" message:nil delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [alert show]; 
} 
3

...これを実現する取得するデータの

少量の任意の例やコードスニペットを必要とする:NSUserDefaults

適量:プレースメントリスト

大量:CoreData、sqlite

まず、SQLiteを直接使用してみましょう。

  • 多くの初期のiPhoneデータベースの例は、このようなFMDBなど
  • SQLiteのObjective-Cのラッパーを使用して書かれたクロスプラットフォームの互換性のための潜在的なリレーショナルデータベースシステム

を使用するのは簡単です今すぐコアデータ:

  • 独自のバイナリまたはSQLiteストレージ形式でデータを格納できます。
  • はるかに高いレベルあなたが実際には直接物事を格納することができ、直接
  • ないRDBMSのSQLiteを使用するよりも、オブジェクトをシリアル化できます。

本当の質問は、使いやすいですか?まあ、それは本当にあなたがやっていることにかかっています。私が最近作ったアプリでは、SQLiteデータベースから順番に少量のデータを読み込むだけでした。これは単純な仕事で、私は単にiPhone SQLiteと一緒にFMDBを使いました。今、もし私がそれを読んでいる以上のデータで何かをする必要があれば、Core Dataはこれをもっと簡単にすることができ、私はそれを使うことをお勧めします。

結論:コアデータは、ちょうどあなたがすでに既存のコードを持っていない限り、私はそれを使用することをお勧めしますことを非常に多くの物事はそんなに簡単になり、あるいはここでの唯一の最も基本的なデータベースの使用

をしているのは、いくつかのチュートリアルのリストです

  1. http://www.applausible.com/blog/?p=317

  2. http://maniacdev.com/2010/04/great-beginners-core-data-tutorial/

  3. http://mobile.tutsplus.com/tutorials/iphone/nsuserdefaults_iphone-sdk/

0

は、私たちは、日付の本当にたくさんの話をしている場合は、あなたがより良いコアデータを使用すると思います。ユーザー設定やそのようなものなど、ごくわずかな情報しか保存しない場合、NSUserDefaultsは正しい方法です。私はあなたがそれを得ることを願ってい

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ 
    [yourTimer invalidate]; 
    yourTimer = nil; 
} 
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{ 
    [yourTimer invalidate]; 
    yourTimer = nil; 
} 
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    UITouch *touch = [touches anyObject]; 
    CGPoint *currentPosition = [touch locationInView:self.view]; 

    //here you have to check if the touch is inside the cell you wanted 
    //note that this code wont work, you have to personalize it, this is only a hint 
    if ([currentPosition isInsideYourCell]){ 
     if (!yourTimer.isValid) { 
      // NSLog(@"testausgabe"); 
      yourTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 //any interval you like 
                 target:self 
                 selector:@selector(onTick:) 
                 userInfo:nil repeats: YES]; 
      [yourTimer fire]; 
     } 
    } 

} 
- (BOOL)isInsideYourCell{ 
//check if the touch is inside the cell 
} 
- (void)onTick:(NSTimer *)timer { 
    if (timer.timeInterval >= 2.0){ 
     //lets say your dialogue will appear after 2 secconds 
     [self displayYourDialogue]; 
    } 
} 

:、私はちょうどあなたが次のメソッドを実装する必要がありますのtableViewであなたのViewControllerでyourTimer それを呼ば あなたはapropertyとしてNSTimerをネブラスカ:どのようにそれを達成するために

この助けを借りて

関連する問題