С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
Slava-hacker32
7 / 7 / 0
Регистрация: 16.11.2011
Сообщений: 250
#1

Не получается передать результат парсинга в другой контроллер - Программирование iOS

12.01.2015, 13:12. Просмотров 474. Ответов 2
Метки нет (Все метки)

Здравствуйте. Поясните почему возникает такая ситуация. У меня есть класс наследник NSOperation. В этом классе происходит парсинг xml после того как он отпарсит то результативный массив (массив словарей) должен отправляться в tableView. В методе main (класса парсинга), в которой и происходит отправка результата, но она не срабатывает если нету NSLog. То есть если я перед отправкой проверяю (чисто для себя) есть там данные или нет то массив отправляется, но если я этот NSLog уберу то отправки не происходит, принимающий массив пуст и как результат в TableView ничего нету. Я не могу понять как NSLog может влиять на отправку? В feedArray должен передаться appRecordList.

Код где я запускаю этот парсинг:
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
-(void)startingParse: (NSData*)data  {
    self.queue = [[NSOperationQueue alloc]init];
    
    
    VRParser *parser = [[VRParser alloc]init];
    parser.dataXml = data;
    NSLog(@"data %@", data);
    __weak VRParser *weakParser = parser;
    
    parser.completionBlock = ^{
        if (weakParser.appRecordList) {
            dispatch_async(dispatch_get_main_queue(), ^{
                
               
                VRRootViewController *rootViewController = (VRRootViewController*)[(UINavigationController*)self.window.rootViewController topViewController];
                
                
                rootViewController.feedsArray = weakParser.appRecordList;
                [rootViewController.tableView reloadData];
                
                
                
                NSLog(@"/n/n/n/HELLLO/n/n/n/n");
                NSLog(@"\n\n\n------------------\n");
                NSLog(@"Parse rootViewController feed = %@", rootViewController.feedsArray);
                NSLog(@"\n\n\n--------\nParse feed = %@", weakParser.appRecordList);
            });
        }
        self.queue = nil;
        
    };
    [self.queue addOperation:parser];
}
А это код самого парсинга

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
//
//  VRParser.m
//  rssReader
//
//  Created by Admin on 06.01.15.
//  Copyright (c) 2015 admin. All rights reserved.
//
 
#import "VRParser.h"
 
@interface VRParser ()
{
    NSXMLParser* parser;
    NSMutableArray* feeds;
    NSMutableDictionary *item;
    NSMutableString* title;
    NSMutableString *pubDate;
    NSMutableString * author;
    NSMutableString *link;
    NSMutableString *description;
    NSString *element;
}
 
@end
 
 
 
@implementation VRParser
@synthesize feeds = _feeds;
-(void)main {
    _feeds = [[NSMutableArray alloc]init];
  //  NSURL *url = [NSURL URLWithString:
               //   @"http://rss.cbc.ca/lineup/topstories.xml"];
 
    
    parser = [[NSXMLParser alloc]initWithData:self.dataXml];
  
   
    [parser setDelegate:self];
    [parser setShouldResolveExternalEntities:NO];
    [parser parse];
    
    
    if (![self isCancelled])
    {
        // Set appRecordList to the result of our parsing
        self.appRecordList = self.feeds;
        NSLog(@"self.appRecordList %@",  self.appRecordList);
         }
 
    
    NSLog(@"VRParser  main");
}
 
 
#pragma mark - Parser
 
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
    element = elementName;
    
    NSLog(@"VRParser  didStartElement");
    
    if ([element isEqualToString:@"item"]) {
        item = [[NSMutableDictionary alloc]init];
        title = [[NSMutableString alloc]init];
        link = [[NSMutableString alloc]init];
        pubDate = [[NSMutableString alloc]init];
        author = [[NSMutableString alloc]init];
        description = [[NSMutableString alloc]init];
    }
}
 
 
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
{dispatch_sync(dispatch_get_main_queue(), ^{
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Error. Site url is crash" message:[parseError localizedDescription] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    
    [alert show];
     });
        NSLog(@"error %@", parseError);
 
}
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    if ([[alertView buttonTitleAtIndex:buttonIndex]isEqualToString:@"Repeat"]) {
        
        [self main];
       
    }
}
 
 
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    
    
    if ([elementName isEqualToString:@"item"]) {
        [item setObject:title forKey:@"title"];
        [item setObject:link forKey:@"link"];
        [item setObject:pubDate forKey:@"pubDate"];
        [item setObject:author forKey:@"author"];
        [item setObject:description forKey:@"description"];
        
        
        [_feeds addObject:[item copy]];
    }
}
 
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
    if ([element isEqualToString:@"title"]) {
        [title appendString:string];
    } else if ([element isEqualToString:@"link"]) {
        [link appendString:string];
    }
    
    else if ([element isEqualToString:@"pubDate"]) {
        [pubDate appendString:string];
    }
    else if ([element isEqualToString:@"author"]) {
        [author appendString:string];
    }
    else if ([element isEqualToString:@"description"]) {
        [description appendString:string];
    }
    
    
}
 
-(void)parserDidEndDocument:(NSXMLParser *)parser {
 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
 
    
    
}
 
 
 
 
@end
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2015, 13:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не получается передать результат парсинга в другой контроллер (Программирование iOS):

Передать результат в окно другой активности - Программирование Android
При нажатии на конкретный элемент . Прошу Сильно не пинать .Только учусь. public class MainActivity extends Activity implements...

Как передать результат из одного фрейма в другой? - HTML, CSS
Имеется два фрейма. В одном из них в Javascript написана некая функция, результат выполнения которой - текстовая строка ( в целом, что - то...

Передать результат одного запроса в другой - ошибка - Java EE
При попытке передать результат одного запроса в параметр другого выбивает ошибку. Исходник сервлета: package Controller; import...

Передать результат выполнения Sql запроса другой программе - C++ Qt
Возможно, вопрос глупый, но можно ли каким-нибудь способом передать переменную класса QSqlQuery через tcp-соединение? Суть в том, что...

Передать результат одной функции в формальные параметры другой - C#
Это CodedUI тест в VS2010 Цель такая - в поле username передать случайно сгенерированный адрес. Так работает: public class Login ...

Не получается передать массив из одного в другой класс - C#
Добрый день! Привет всем! Помогите пожалуйста! Как из класса Employee добавить масив работников в класс Departament так как в задании, если...

2
zulkis
683 / 610 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
13.01.2015, 07:49 #2
Покажите интерфейс VRParser.h
0
Slava-hacker32
7 / 7 / 0
Регистрация: 16.11.2011
Сообщений: 250
13.01.2015, 10:37  [ТС] #3
Вот, пожалуйста
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//
//  VRParser.h
//  rssReader
//
//  Created by Admin on 06.01.15.
//  Copyright (c) 2015 admin. All rights reserved.
//
 
#import <Foundation/Foundation.h>
 
@interface VRParser : NSOperation <NSXMLParserDelegate, UIAlertViewDelegate>
@property (strong, nonatomic) NSMutableArray* feeds;
 
 
@property (strong, nonatomic)NSArray* appRecordList;
 
@property (strong,nonatomic)NSData *dataXml;
 
@end
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2015, 10:37
Привет! Вот еще темы с ответами:

Передать в хранимую процедуру результат запроса другой хранимой процедуры - MySQL
как передать в хранимую процедуру результат запроса другой хранимой процедуры????

Результат выборки передать GET запросом для изменения условий другой выборки - PHP БД
Есть такая таблица menu: Таким запросом вывожу на страницу: &lt;?php include (&quot;bd.php&quot;); function display_menus($parent = 0) ...

Не получается передать список элементов combobox одной формы в combobox другой - C#
Есть две формы, на главной есть список комбобокс, на доченей тоже есть комбобокс... что в конструкторе второй формы надо написать, чтобы в...

Вывести результат парсинга - Visual Basic .NET
Здравствуйте. Вот у меня есть строка &lt;!]&gt; И есть регулярка \ Эта регулярка ищет все, кроме &lt;![CDATA[ и тому подобной ереси, то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.