簡體   English   中英

無法從 NSDictionary 和 JSON 獲取值

[英]Unable to get values from NSDictionary and JSON

我正在嘗試使用從 json 獲得的數據構建一些對象。

不幸的是,盡管進行了多次嘗試,但我在嘗試解決失敗的所有嘗試中訪問元素時仍然遇到問題。

代碼是:

   [NSURLConnection sendAsynchronousRequest:[[NSURLRequest alloc] initWithURL:restURL] queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {

    if (error) {
        NSLog(@"Log error thing: %@", error);
    } else {
        NSLog(@"THE DATA IS REAL: %@", data);

        NSMutableArray* jsonArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

        NSLog(@"%@", jsonArray);

        for (NSDictionary *item in jsonArray){
            NSString *val = item[@"title"];
            NSLog(@"AN ITEM: %@ %@", item, val);
        }

    }
}];

'the Data is real 行被打印出來,json 目前只包含一個項目,但會有更多項目,其結構如下:

2015-11-21 11:37:06.313 UnfoldApp[20444:562253] {
timelines =     (
            {
        "__v" = 1;
        "_id" = 564fff17b6db3ccd0529e410;
        creationDate = "2015-11-21T05:18:42.293Z";
        location = Norwich;
        picture = "http://photos4.meetupstatic.com/photos/event/a/9/b/c/600_384643452.jpeg";
        posts =             (
                            {
                "__v" = 0;
                "_id" = 564fff49b6db3ccd0529e411;
                content = "Tonight saw 134 people witness 26 pitches from this years Sync the City attendees. All had a minute each to deliver their business idea. Voting then began. The audience selected their favourite business ideas. Leaving 14 new business leaders ready to form their teams. Over the next hour all participants gravitated towards the business idea that most ...";
                creationDate = "2015-11-21T05:18:42.299Z";
                eventDate = "2015-11-17T22:33:45.000Z";
                heading = "Sync The City Pitches 2015 - Norfolk Tech Journal";
                imageFilename = "http://www.norfolktechjournal.com/wp-content/uploads/2015/11/Sync-the-City-the-Pitches.jpg";
                keywords = "City,Student Rental Service,Guerilla Network Pitch,Chris Spalton Photos,Help Majorie Pitch #,NHS,House,Prototype City Pitch,Tim Stephenson";
                location = doh;
                relatedPosts =                     (
                );
                slug = "sync-the-city-pitches-2015-norfolk-tech-journal";
            }
        );
        slug = "sync-the-city";
        title = "Sync the City";
    }
);

}

[NSURLConnection sendAsynchronousRequest:[[NSURLRequest alloc] initWithURL:restURL] queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {

    if (error) {
        NSLog(@"Log error thing: %@", error);
    } else {
        NSLog(@"THE DATA IS REAL: %@", data);

        NSArray* jsonArray = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
        NSLog(@"%@", jsonArray);



        NSDictionary *json = [NSJSONSerialization JSONObjectWithData:jsonArray options:kNilOptions error:nil];
       // NSLog(@"Dictionary: %@", [json objectForKey:@"title"]);



}

當我嘗試訪問元素時出現錯誤,在這種情況下,它是我遍歷 jSonarray 中的項目的地方。

堆棧跟蹤:

   2015-11-21 11:37:06.314 UnfoldApp[20444:562253] -[__NSCFString objectForKeyedSubscript:]: unrecognized selector sent to instance 0x79d5c110
2015-11-21 11:37:06.317 UnfoldApp[20444:562253] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString objectForKeyedSubscript:]: unrecognized selector sent to instance 0x79d5c110'
*** First throw call stack:
(
    0   CoreFoundation                      0x02199a84 __exceptionPreprocess + 180
    1   libobjc.A.dylib                     0x01c5ae02 objc_exception_throw + 50
    2   CoreFoundation                      0x021a2dd3 -[NSObject(NSObject) doesNotRecognizeSelector:] + 275
    3   CoreFoundation                      0x020e0cdd ___forwarding___ + 1037
    4   CoreFoundation                      0x020e08ae _CF_forwarding_prep_0 + 14
    5   UnfoldApp                           0x0009bc39 __33-[AppDelegate someShittyFunction]_block_invoke + 649
    6   CFNetwork                           0x025ccb62 __67+[NSURLConnection sendAsynchronousRequest:queue:completionHandler:]_block_invoke_2 + 177
    7   Foundation                          0x01907a6b __NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__ + 12
    8   Foundation                          0x0182b8ff -[NSBlockOperation main] + 108
    9   Foundation                          0x0180bd84 -[__NSOperationInternal _start:] + 697
    10  Foundation                          0x0180bac4 -[NSOperation start] + 83
    11  Foundation                          0x0180b902 __NSOQSchedule_f + 245
    12  libdispatch.dylib                   0x02b9a9cd _dispatch_client_callout + 14
    13  libdispatch.dylib                   0x02b7e650 _dispatch_queue_drain + 2227
    14  libdispatch.dylib                   0x02b7db04 _dispatch_queue_invoke + 570
    15  libdispatch.dylib                   0x02b807bb _dispatch_root_queue_drain + 550
    16  libdispatch.dylib                   0x02b8058e _dispatch_worker_thread3 + 115
    17  libsystem_pthread.dylib             0x02eba270 _pthread_wqthread + 1050
    18  libsystem_pthread.dylib             0x02eb7f82 start_wqthread + 34
)
libc++abi.dylib: terminating with uncaught exception of type NSException

感謝您的任何幫助,非常感謝。

你能試試這個解析嗎:

if (error) {
        NSLog(@"Log error thing: %@", error);
} else {
        NSLog(@"THE DATA IS REAL: %@", data);
// this will be your actaul dictionary
        NSDictionary *jsonObject = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]];

// Array of Timelines
        NSArray* timelineArray = jsonObject[@"timelines"];
        NSLog(@"%@", timelineArray);

// Get Title from Timeline Dictionary
       if (timelineArray.count > 0){
          NSDictionary *timelineDictionary = timelineArray.firstObject;
          NSLog(@"Title: %@", timelineDictionary[@"title"]);
      }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM