Форум программистов, компьютерный форум CyberForum.ru

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

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

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

12.01.2015, 13:12. Просмотров 431. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2015, 13:12     Не получается передать результат парсинга в другой контроллер
Посмотрите здесь:
Как правильно передать ссылку в другой класс Swift
Swift Как из одного View передать переменную в другой?
Swift Как из одного View Controller передать переменную в другой
Хотел бы посоветоваться насчет парсинга государственного сайта
Objective-C Контроллер не ловит событие нажатия
Objective-C Контроллер для свайпа и вынесение логики
Android Передать результат в окно другой активности
Как передать результат из одного фрейма в другой? HTML, CSS
Java EE Передать результат одного запроса в другой - ошибка
Передать результат выполнения Sql запроса другой программе C++ Qt
C# Передать результат одной функции в формальные параметры другой

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
13.01.2015, 07:49     Не получается передать результат парсинга в другой контроллер #2
Покажите интерфейс VRParser.h
Slava-hacker32
7 / 7 / 0
Регистрация: 16.11.2011
Сообщений: 242
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
Yandex
Объявления
13.01.2015, 10:37     Не получается передать результат парсинга в другой контроллер
Ответ Создать тему
Опции темы

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