UITB-C UITable не заполняется MutableArray - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть массив, который загружается при запуске приложения, получает правильные данные и заполняет массив, но как только я перехожу к контроллеру таблиц, он говорит, что массив равен нулю.

Здесь я получаю данные

AppDelegate.h

@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
    NSMutableArray *tableDicsArrayTickets;
    NSMutableArray *dictionaryStack;
    NSMutableString *textInProgress;
    NSError *errorPointer;
}
@property (strong, nonatomic) NSMutableArray *tableDicsArrayTickets;
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) NSString *photo_URL;
+(NSDictionary *)dictionaryForXMLData:(NSData *)data error:(NSError **)errorPointer;
+(NSDictionary *)dictionaryForXMLString:(NSString *)string error:(NSError **)errorPointer;
+(AppDelegate *) getInstance; 

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

    self.tableDicsArrayTickets = [[NSMutableArray alloc] init];

    NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];

    NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration:defaultConfigObject delegate:nil delegateQueue:[NSOperationQueue mainQueue]];

    NSURL *url = [NSURL URLWithString:@"http://MYURLexample.php"];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    NSString *deviceCode = [[[UIDevice currentDevice] identifierForVendor] UUIDString];

    NSString *post = [[NSString alloc] initWithFormat:@"parameter=%@", deviceCode];

    [request setHTTPMethod:@"POST"];
    [request setHTTPBody:[post dataUsingEncoding:NSUTF8StringEncoding]];

    NSURLSessionDataTask *dataTask = [defaultSession dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSLog(@"Response:%@ %@\n", response, error);
        if(error == nil)
        {
            NSString *text =[[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];

            NSLog(@"Data = %@",text);

            NSDictionary *dics = [[NSDictionary alloc]initWithDictionary:[AppDelegate dictionaryForXMLString:text error:nil]];

            NSLog(@"dics is %@", dics);
            [self.tableDicsArrayTickets addObject:[[dics valueForKey:@"response"] valueForKey:@"text"]];
            NSLog(@"Array2 is %@", self.tableDicsArrayTickets);

        }
    }];
    [dataTask resume];

ViewController.h

@interface HistoryViewController : UIViewController<UITableViewDataSource, UITableViewDelegate>
{
    AppDelegate *mainDelegate;
}
@property (strong, nonatomic) AppDelegate *mainDelegate;

ViewController.m

#pragma
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [mainDelegate.tableDicsArrayTickets count];
}


-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 60;
}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    NSMutableArray *array = mainDelegate.tableDicsArrayTickets;
    NSString *cellIdentifier = @"Cell";

    PhotoTableViewCell *cell = (PhotoTableViewCell *) [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if(cell == nil)
    {
        cell = [[PhotoTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];


    }
    NSLog(@"Array is %@", [[array objectAtIndex:indexPath.row] objectForKey:@"text"]);
    cell.ticketNumber.text = [[array objectAtIndex:indexPath.row] objectForKey:@"text"];
    return cell;
}

У меня нет проблем с получением данных для массива, только когда я наконец иду к контроллеру представления с таблицей, массив становится нулевым.

1 Ответ

0 голосов
/ 19 апреля 2019

Я думаю, что вы делаете несколько вещей неправильно ...

Во-первых:

// AppDelegate.h

@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
    // this should NOT be here
    NSMutableArray *tableDicsArrayTickets;

    NSMutableArray *dictionaryStack;
    NSMutableString *textInProgress;
    NSError *errorPointer;
}
@property (strong, nonatomic) NSMutableArray *tableDicsArrayTickets;
// ...

Это должно дать вам предупреждение компиляции:

autosynthesized property 'tableDicsArrayTickets' will use synthesized instance
variable '_tableDicsArrayTickets', not existing instance variable 'tableDicsArrayTickets'

То же самое с:

//HistoryViewController.h

@interface HistoryViewController : UIViewController<UITableViewDataSource, UITableViewDelegate>
{
    // this should NOT be here
    AppDelegate *mainDelegate;
}
@property (strong, nonatomic) AppDelegate *mainDelegate;

Что должно дать вам:

autosynthesized property 'mainDelegate' will use synthesized instance 
variable '_mainDelegate', not existing instance variable 'mainDelegate'

Тогда вы не показываете, где у вас это есть в HistoryViewController.m (вероятно, должно быть в viewDidLoad()):

_mainDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...