我正在尝试开发一个具有注册页面的应用程序,实际上我正在使用Parse.com作为数据库,我已经将PFUser用于(用户名,密码,电子邮件)并且它可以工作很好,但碰巧我在注册页面中有其他信息,如(名称,DOB和位置),所以当我添加它们时,我收到了一个错误:
* 由于未捕获的异常终止应用' NSInvalidArgumentException',原因:'无法在PFObject上使用nil作为键或值。使用NSNull作为值。
请注意,我有一个名为User的表(解析提供的默认值),我想将(名称,DOB和位置)添加到该表 User 但是我得到了该错误。
这是我的代码
- (void) Registeruser {
PFUser *newUser = [PFUser user];
newUser.username = UserNameS.text;
newUser.email= EmailS.text;
newUser.password=PasswordS.text;
PFObject * newUser1 = [PFObject objectWithClassName:@"User"];
newUser1[@"name"]= NameS.text;
newUser1[@"gender"]= genderS.text;
newUser1[@"Location"]=genderS.text;
NSString *dateStr = DOBS.text;
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateStyle:NSDateFormatterLongStyle];
[dateFormat setTimeStyle:NSDateFormatterShortStyle];
NSDate *date = [dateFormat dateFromString:dateStr];
newUser1[@"dateofBirth"]=date;
[newUser signUpInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
if (!error) {
NSLog(@"Registration success!");
UserNameS.text = nil;
PasswordS.text = nil;
EmailS.text = nil;
NameS.text=nil;
DOBS.text=nil;
LocationS.text=nil;
genderS.text=nil;
[self performSegueWithIdentifier:@"login" sender:self];}
else {
NSLog(@"There was an error in registration");
}}];}
答案 0 :(得分:2)
问题是您尝试添加到PFObject的其中一个对象并不存在。我无法肯定地说,但我打赌你的问题就在这里:
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateStyle:NSDateFormatterLongStyle];
[dateFormat setTimeStyle:NSDateFormatterShortStyle];
NSDate *date = [dateFormat dateFromString:dateStr];
newUser1[@"dateofBirth"] = date;
您确定日期设置正确吗?
在保存之前,请尝试NSLog以确保您的日期有效。如果没有重复,直到找到零值。我使用的一个技巧让我感觉更好是使用它:
此:
newUser1[@"name"]= NameS.text;
newUser1[@"gender"]= genderS.text;
newUser1[@"Location"]=genderS.text;
可能是:
if (NameS.text) newUser1[@"name"]= NameS.text;
if (genderS.text) newUser1[@"gender"]= genderS.text;
if (date) newUser1[@"dateofBirth"] = date;
if (objectYouWantToAdd) yourPFObject[@"someKey"] = objectYouWantToAdd;
这样,我们在尝试添加对象之前检查对象是否存在。