3

私はiOSの専門家ではありませんが、物事を学ぶためのアプリに取り組んでいます. アプリには、コア データへの入力用の 2 つの行(NSDate属性とNSString属性 (数値)) を持つ tableView があります。

アプリのユーザーは、これらの値を毎日入力します。私が達成しようとしているのは、次のような値を保存する前に、ある種の入力チェックを行うことです。

1-まず、ユーザーが 1 日に入力した NSString 属性 (主に数字のみ) が前日よりも少なくならず、同じ日に 2 つの値を入力できないことを確認したいと思います。

2-次に、NSDate 属性を常に現在の日付で開始し、ユーザーが過去の日付を選択できないようにしたいと考えています。

私の質問が些細なものである場合は、心からお詫び申し上げます。これについては、本当に助けが必要です。

更新:問題番号 nsdate の入力制約が解決されました。現在、次の問題は引き続き発生します。

  • ユーザーがテーブルビューのそれぞれのセルに値を入力できるようにしたい。次に、保存ボタンをクリックすると (**実装されています)、入力した値が前日よりも小さいため、入力した値を変更するよう求める**アラートまたは簡単なテキスト メッセージが表示されます。前日は、彼が選択した NSDate 入力属性によって定義されます (スクリーンショットのリンクを参照してください: http://i.stack.imgur.com/gJnkP.png 、セル 1 は属性の数値を表し、セル 2 は NSdate 属性です。
4

1 に答える 1

0

NSDate 属性を常に現在の日付で開始し、ユーザーが過去の日付を選択できないようにするために、このコードを使用 します。

    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDate *currentDate = [NSDate date];
    NSDateComponents *comps = [[NSDateComponents alloc] init];
    [comps setYear:0];
 NSDate *minDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0];
[shiftDatePicker setMinimumDate:minDate];

UIDatePicker私の代わりにあなたの名前を使ってください。

最初の質問の答えは少し理論的ですが、理解していただければ幸いです。

最初に、 で Table のオブジェクトを取得する必要がありますUIViewController。から値を取得CoreDataし、入力したユーザーと照合します。ユーザーがより大きな値を入力した場合は問題ありません。以前の値以下の場合はエラーを表示します。

これを最初の質問に使用します。

- (NSFetchRequest *)getBasicRequestForEntityName: (NSString *)entityName
{
    //Get Fetch request for particuler entity.
    NSManagedObjectContext * managedObjectContext = [[AppDelegate getAppdelegate] managedObjectContext];
    NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];

    NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:managedObjectContext];
    [request setEntity:entity];
    return request;
}


-(NSMutableArray*)getAllRequestedShifts
{
    NSFetchRequest *request = [self getBasicRequestForEntityName:@"YOUR ENTITY NAME"];

    [request setReturnsObjectsAsFaults:NO];
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"previous value" ascending:NO];

    NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
    [request setSortDescriptors:sortDescriptors];
    [sortDescriptor release];


    NSError *error = nil;
    NSArray *results = [[managedObjectContext executeFetchRequest:request error:&error]mutableCopy];
    NSMutableArray *arr=[NSMutableArray array];

    if (!error && [results count] > 0)
    {

        for (int k=0; k<[results count]; k++)
        {
            YourentityObject *requestShiftObj = [results objectAtIndex:k];
            [arr addObject:requestShiftObj];
        }

    }
    return arr;
}

- (void)viewDidLoadメソッドでは、この行を使用します

NSMutableArray*  arrayOfSentRequest=[self getAllRequestedShifts];

これによりCoreData、maxvalue オブジェクトが一番上にあるすべてのオブジェクトのリストが返されます。

このオブジェクトを取得し、プロパティpreviousvalueを使用して、入力されている値と比較し、アルゴに従って結果を生成します。

このコードを使用

NSDateFormatter* dateF = [[NSDateFormatter alloc] init];
    [dateF setDateFormat:@"YYYY-MM-dd"];
  NSString *currentDate=[dateF stringFromDate:[NSDate date]];
    NSDate  * currentDateObj=[dateF dateFromString:currentDate];
    NSDate  * shiftDateFieldObj=[dateF dateobjectfromDB];
NSTimeInterval timeDifferenceBetweenDates = [shiftDateFieldObj timeIntervalSinceDate:currentDateObj];
 if (timeDifferenceBetweenDates>0.0)
  {
      Enter the value to text field ;
  }
  else
  {
       show alert
  }

お役に立てれば。

于 2013-07-16T13:20:46.183 に答える