我真的不是iOS的专家,但我一直在开发应用程序来学习。在应用程序中,我有一个tableView,其中有两行用于输入核心数据:NSDate
属性和NSString
属性(数值)。
应用中的用户每天都会输入这些值。我想要实现的是在存储值之前进行某种输入检查:
1 - 首先,我想确保用户一天输入的NSString属性(主要是数字)从不比前一天并且永远不能在同一天输入两个值。
2 - 然后,我希望NSDate属性始终从当前日期开始,永远不允许用户选择过去的日期。
如果我的问题很简单,我真诚地道歉,我真的需要一些帮助。
UPDATE:问题编号nsdate输入约束已解决。现在仍然存在以下问题:
答案 0 :(得分: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
中获取Table的对象。从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
}
希望这有帮助。