У меня есть приложение с кодом, похожим на многие сетевые приложения. Я хочу получить полезную нагрузку json из блока завершения в массив и перечислить другой класс для создания объектов. Затем я хочу, чтобы эти объекты заполнили tableView.
Моя проблема в том, что для решения, которое у меня есть, требуется много свойств типа NSMutableArray в блоке завершения. Я видел только те демонстрации, в которых есть комментарий // что-то делает с данными. Просто сложно разбирать, вызывать методы для других классов и заполнять массив из блока завершения. Я могу, но код становится спагетти.
Что такое хорошая архитектура для этого?
if (request) {
[client sendTwitterRequest:request completion:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
if (data) {
// handle the response data e.g.
NSLog(@"DID data request start");
NSError *jsonError;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonError];
[self handleJSON:json];
}
}
else {
NSLog(@"Error: %@", connectionError);
}
}];
}
else {
NSLog(@"Error: %@", error);
}
Я создаю вспомогательный метод примерно так
-(void)handleJSON:(NSDictionary*)dictionary{
for (NSDictionary *jsonDict in dictionary) {
id value = [jsonDict valueForKey:@"text"];
NSLog(@"string text %@", value);
}
Но тогда я получаю
этот класс не совместим с кодом ключа для текста ключа. '
JSON выглядит так:
{
"search_metadata" = {
"completed_in" = "0.041";
count = 15;
"max_id" = 1013632106432360448;
"max_id_str" = 1013632106432360448;
"next_results" = "?max_id=1013632026514079744&q=%23trump&include_entities=1";
query = "%23trump";
"refresh_url" = "?since_id=1013632106432360448&q=%23trump&include_entities=1";
"since_id" = 0;
"since_id_str" = 0;
};
statuses = (
{
contributors = "<null>";
coordinates = "<null>";
"created_at" = "Mon Jul 02 03:55:01 +0000 2018";
entities = {
hashtags = (
{
indices = (
20,
28
);
text = GOODWIN;
Когда я быстро перечисляю, чтобы получить словари в массиве, количество массивов равно 2 - один для search_metadata
, а другой для statuses
. В пределах statuses
есть несколько твитов. Я никогда не сталкивался с чем-либо подобным.