为啥这个 NSString 在 FireBase 查询块中为空?
Posted
技术标签:
【中文标题】为啥这个 NSString 在 FireBase 查询块中为空?【英文标题】:Why is this NSString null in a FireBase query block?为什么这个 NSString 在 FireBase 查询块中为空? 【发布时间】:2015-05-08 16:59:10 【问题描述】:我不明白为什么这个字符串在 FQuery 块中为空。当我在用户键上构建 dailyLog MutableDictionary 时,我的应用程序不断崩溃;
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"MMMM dd, YYYY"];
NSString *userID = [[self.userProfile objectForKey:@"userID"] copy];
self.logFirebase = [[Firebase alloc] initWithUrl:@"https://urlName.firebaseio.com/DailyLog"];
[[[self.logFirebase queryOrderedByPriority] queryEqualToValue:userID childKey:@"userID"] observeEventType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot)
if (![snapshot.value isEqual:[NSNull null]])
NSMutableArray *data = [CGCFirebaseDataExtractor extractKeysAndObjects:snapshot.value];
self.dailyLog = [data filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"Name CONTAINS[cd] %@",[df stringFromDate:[NSDate date]]]].lastObject;
else
self.dailyLog = [[NSMutableDictionary alloc] init];
NSLog(@"users Profile:%@",self.userProfile);
NSLog(@"users ID :%@",[self.userProfile objectForKey:@"userID"]);
[self.dailyLog setObject:[df stringFromDate:[NSDate date]] forKey:@"date"];
[self.dailyLog setObject:[self.userProfile objectForKey:@"userID"] forKey:@"user"];
[self.dailyLog setObject:[NSNumber numberWithInt:450] forKey:@"calories"];
[[self.logFirebase childByAutoId] setValue:self.userProfile];
];
编辑: 当我登录 self.userProfile 时,我得到了我想要的正确信息。但是当我从 FQuery 块中记录用户 ID 本身时,它是空的
这是我更新的崩溃数据:
2015-05-08 13:21:22.709 <appname>[4160:1321097] users Profile:
"-JoirTqCXFFDY1psLTNn" =
dateRegistered = "1431010405.81792";
userID = "304D92EF-CE77-4A10-A55F-9847153699F7";
userName = "User's Name";
;
2015-05-08 13:21:22.709 <appname>[4160:1321097] users ID :(null)
2015-05-08 13:21:22.714 <appname>[4160:1321097] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** setObjectForKey: object cannot be nil (key: user)'
*** First throw call stack:
(0x1852082d8 0x196a340e4 0x1850f1428 0x10007de00 0x1001454d0 0x100390fd4 0x100390f94 0x100395c28 0x1851bf7f8 0x1851bd8a0 0x1850e92d4 0x18e8ff6fc 0x189caefac 0x10007f14c 0x1970b2a08)
libc++abi.dylib: terminating with uncaught exception of type NSException
【问题讨论】:
这与您最近删除的问题完全相同。 你的日志是假的。时间和线程不匹配。请重新运行应用并粘贴一次日志记录运行的实际结果。 日志仍然是相同的输出 我明白,但重要的是要查看真实的日志记录 - 感谢您将其粘贴。 好吧,我终于想通了!我是个白痴。 【参考方案1】:对不起,我是个白痴,没有仔细看你的日志。
2015-05-08 13:21:22.709 <appname>[4160:1321097] users Profile:
"-JoirTqCXFFDY1psLTNn" =
dateRegistered = "1431010405.81792";
userID = "304D92EF-CE77-4A10-A55F-9847153699F7";
userName = "User's Name";
;
这个对象显然是字典中的字典。第一个(外部)字典有键 "-JoirTqCXFFDY1psLTNn"
这是它唯一的键。这就是为什么尝试获取密钥userID
失败的原因;该键是第二个(内部)字典的一部分。
【讨论】:
这不是导致崩溃的原因。我正在尝试将 userProfile 中的数据复制到 dailyLog 中。两个字典中的键是否匹配是无关紧要的。而且我也使用过 [self.userProfile objectForKey:@"userID"]。它仍然是空的 不,您没有尝试从 userProfile 复制数据。您正在尝试从第一行使用userID
。但它是零。
换种说法,我试过使用 [self.userProfile objectForKey:@"userID"] 仍然得到 null
我真傻,我忘了通过我的 CGCFirebaseDataExtractor 运行那个字典。它修复了嵌套字典问题
我认为有某种方法。我对火力基地一无所知。以上是关于为啥这个 NSString 在 FireBase 查询块中为空?的主要内容,如果未能解决你的问题,请参考以下文章
为啥这个 Firebase Function Promise 没有返回正确的错误?
转换对象以写入firebase? (只能存储 NSNumber、NSString、NSDictionary 和 NSArray 类型的对象)
为啥在 Typescript(Firebase 函数)中双重导入 NPM 包