在cellForRowAtIndexPath中使用NSLog获取NSCFString objectAtIndexedSubscript

时间:2016-11-11 13:22:45

标签: ios objective-c json subscript nscfstring

我已经使用这种方法完成了我的应用程序,我实施的最后一个调用是一个简单的JSON响应,我需要解析它并且它给了我:

  

[__ NSCFString objectAtIndexedSubscript:]:发送无法识别的选择器   例如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]]);

应用程序崩溃,上面分享了我的消息。

2 个答案:

答案 0 :(得分:2)

看两行

            allResponse = [[NSMutableArray alloc] init];
            allResponse = responseObject;

那是胡说八道。将allResponse设置为新创建的可变数组,然后将其替换为responseObject。而且没有任何检查。任何意外数据都会导致您的应用崩溃。

你应该使responseObject成为一个NSDictionary * - 然后检查它确实是一个NSDictionary *。不要使用valueForKey,除非你能给出一个很好的理由,而不是仅仅使用responseObject [@“Practice”]。并检查这些类型。

答案 1 :(得分:1)

allPracticeName的类型为NSString(值为“&lt; null&gt;”)。您正在此字符串上调用下标运算符[]

allPracticeName[indexPath.row]

NSString没有下标实现。

删除下标:

NSLog(allPracticeName);