gpt4 book ai didi

ios - 如何使用 CoreData 控制用户输入

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:41:55 25 4
gpt4 key购买 nike

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

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

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

2- 然后,我希望 NSDate 属性始终从当前日期开始 并且永远不允许用户选择过去的日期。

如果我的问题很琐碎,我深表歉意,我真的需要一些帮助。

更新:问题编号nsdate输入约束已解决。现在以下问题仍然存在:

  • 我想允许用户在表格 View 中各自的单元格中输入值。然后,当他点击保存按钮(**已实现)时,会显示一条**警报或一条简单的文本消息,要求他更改输入的值,因为他输入的值小于之前的值天。前一天由他选择的 NSDate 输入属性定义(见截图链接:http://i.stack.imgur.com/gJnkP.png,其中单元格 1 表示属性数值,单元格 2 是 NSdate 属性。

最佳答案

将这段代码用于我希望 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 中的所有对象的列表,最大值对象位于顶部。

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

希望这对您有所帮助。

关于ios - 如何使用 CoreData 控制用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17677334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com