在 cellForRowAtIndexPath 中使用 NSLog 获取 NSCFString objectAtIndexedSubscript
Getting NSCFString objectAtIndexedSubscript with NSLog in cellForRowAtIndexPath
我已经使用此方法完成了我的应用程序,我正在实施的最后一个调用是一个简单的 JSON 响应,我需要对其进行解析,它给我:
[__NSCFString objectAtIndexedSubscript:]: unrecognized selector sent
to instance 0x17005caa0'
这个网站上有很多类似的类似问题,但我按照他们的指示做了所有事情,但仍然没有运气。
它是一个嵌套在 responseObject 中的 JSON。我收到了 responseObject,这意味着我发送的请求是正确的。
[[manager dataTaskWithRequest:req completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error){
if (!error) {
if (response) {
allResponse = [[NSMutableArray alloc] init];
allPractice = [[NSMutableArray alloc] init];
allProvider = [[NSMutableArray alloc] init];
allFirstName = [[NSMutableArray alloc] init];
allMiddleName = [[NSMutableArray alloc] init];
allLastName = [[NSMutableArray alloc] init];
allPracticeName = [[NSMutableArray alloc] init];
allResponse = responseObject;
allPractice = [allResponse valueForKey:@"Practice"];
allProvider = [allResponse valueForKey:@"Provider"];
allFirstName = [allProvider valueForKey:@"FirstName"];
allMiddleName = [allProvider valueForKey:@"MiddleName"];
allLastName = [allProvider valueForKey:@"LastName"];
allPracticeName = [allPractice valueForKey:@"PracticeAlias"];
[self.tableView reloadData];
[SVProgressHUD dismiss];
}}
这是我作为 ResponseObjects 得到的结构。
{
AccountType = 2;
CreatedBy = smith;
CreatedDate = "2016-01-25T02:07:42.45";
DisplayName = ", ";
Email = "<null>";
ErrorMessage = "<null>";
FirstName = "<null>";
ID = 1;
IsActive = 1;
Password = test;
Phone = "<null>";
Practice = {
PracticeAlias = “SAMPLE MEDICAL GROUP";
};
PracticeAlias = "<null>";
PracticeCode = "<null>";
PracticeID = 1;
Provider = {
AccountType = 0;
CreatedBy = smith;
LastName = John;
MiddleName = "";
FirstName = Smith;
};
Staff = "<null>";
lstPractice = "<null>";
lstProvider = "<null>";
pageSize = 0;
}
所以在 cellForRowAtIndexPath
当我这样做时:
NSLog(@"%@", [NSString stringWithFormat:@"%@",allPracticeName[indexPath.row]]);
应用崩溃并显示我在上面分享的消息。
allPracticeName
的类型为 NSString
(值为“”)。您正在此字符串上调用下标运算符 []
:
allPracticeName[indexPath.row]
但是NSString
没有下标实现。
去除下标:
NSLog(allPracticeName);
看两条线
allResponse = [[NSMutableArray alloc] init];
allResponse = responseObject;
那是胡说八道。您将 allResponse 设置为新创建的可变数组,然后将其替换为 responseObject。而且没有任何检查。任何意外数据都会使您的应用程序崩溃。
您应该将 responseObject 设为 NSDictionary* - 然后检查它是否确实是 NSDictionary*。不要使用 valueForKey 除非你能给出一个很好的理由为什么你这样做而不是仅仅使用 responseObject [@"Practice"] 例如。并检查这些类型。
我已经使用此方法完成了我的应用程序,我正在实施的最后一个调用是一个简单的 JSON 响应,我需要对其进行解析,它给我:
[__NSCFString objectAtIndexedSubscript:]: unrecognized selector sent to instance 0x17005caa0'
这个网站上有很多类似的类似问题,但我按照他们的指示做了所有事情,但仍然没有运气。
它是一个嵌套在 responseObject 中的 JSON。我收到了 responseObject,这意味着我发送的请求是正确的。
[[manager dataTaskWithRequest:req completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error){
if (!error) {
if (response) {
allResponse = [[NSMutableArray alloc] init];
allPractice = [[NSMutableArray alloc] init];
allProvider = [[NSMutableArray alloc] init];
allFirstName = [[NSMutableArray alloc] init];
allMiddleName = [[NSMutableArray alloc] init];
allLastName = [[NSMutableArray alloc] init];
allPracticeName = [[NSMutableArray alloc] init];
allResponse = responseObject;
allPractice = [allResponse valueForKey:@"Practice"];
allProvider = [allResponse valueForKey:@"Provider"];
allFirstName = [allProvider valueForKey:@"FirstName"];
allMiddleName = [allProvider valueForKey:@"MiddleName"];
allLastName = [allProvider valueForKey:@"LastName"];
allPracticeName = [allPractice valueForKey:@"PracticeAlias"];
[self.tableView reloadData];
[SVProgressHUD dismiss];
}}
这是我作为 ResponseObjects 得到的结构。
{
AccountType = 2;
CreatedBy = smith;
CreatedDate = "2016-01-25T02:07:42.45";
DisplayName = ", ";
Email = "<null>";
ErrorMessage = "<null>";
FirstName = "<null>";
ID = 1;
IsActive = 1;
Password = test;
Phone = "<null>";
Practice = {
PracticeAlias = “SAMPLE MEDICAL GROUP";
};
PracticeAlias = "<null>";
PracticeCode = "<null>";
PracticeID = 1;
Provider = {
AccountType = 0;
CreatedBy = smith;
LastName = John;
MiddleName = "";
FirstName = Smith;
};
Staff = "<null>";
lstPractice = "<null>";
lstProvider = "<null>";
pageSize = 0;
}
所以在 cellForRowAtIndexPath
当我这样做时:
NSLog(@"%@", [NSString stringWithFormat:@"%@",allPracticeName[indexPath.row]]);
应用崩溃并显示我在上面分享的消息。
allPracticeName
的类型为 NSString
(值为“[]
:
allPracticeName[indexPath.row]
但是NSString
没有下标实现。
去除下标:
NSLog(allPracticeName);
看两条线
allResponse = [[NSMutableArray alloc] init];
allResponse = responseObject;
那是胡说八道。您将 allResponse 设置为新创建的可变数组,然后将其替换为 responseObject。而且没有任何检查。任何意外数据都会使您的应用程序崩溃。
您应该将 responseObject 设为 NSDictionary* - 然后检查它是否确实是 NSDictionary*。不要使用 valueForKey 除非你能给出一个很好的理由为什么你这样做而不是仅仅使用 responseObject [@"Practice"] 例如。并检查这些类型。