3

我真的不是 iOS 专家,但我一直在开发一个应用程序来学习东西。在应用程序中,我有一个 tableView,其中有两行用于输入核心数据:一个NSDate属性和一个NSString属性(数值)。

应用程序中的用户每天都会输入这些值。我想要实现的是在存储以下值之前进行某种输入检查:

1-首先,我想确保用户一天输入的 NSString 属性(主要是数字)永远不会少于前一天,并且永远不能在同一天输入两个值。

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名字代替我的名字。

你的第一个问题的答案有点理论化。但我希望你能理解。

首先你应该在你的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的顶部,最大值对象。

检索此对象并使用属性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 回答