0

にブレークポイントを設定しました

Cateogry_Cell * cell = (Cateogry_Cell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

そして、それが常にnilを返すことがわかりました。なぜなら、それは

if(cell == nil) {
    cell = [[Cateogry_Cell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cateogry_Cell"];
}

それらは私が見ることができない問題であるか、nil 部分の私のコードが間違っていますが、とにかく何を入れるかの 100% ではありません。

私はストーリーボードを使用しているので、コードではなく、そこにセルを作成してスタイルを設定しました。

            #import "Category_TableView.h"
            #import "Cateogry_Cell.h"
            #import "JobList_Table.h"
            #import "JobList_Cell.h"
            #import <QuartzCore/QuartzCore.h>

            @interface Category_TableView ()

            @end

            @implementation Category_TableView

            - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
            {
                self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
                if (self) {
                    // Custom initialization


                }
                return self;
            }

            - (void)viewDidLoad
            {
                [super viewDidLoad];
                self.navigationController.navigationBar.hidden = YES;
                // Do any additional setup after loading the view.
                [self.Category_Table registerClass:[Cateogry_Cell class] forCellReuseIdentifier:@"Cateogry_Cell"];

                NSString *requestURL = [NSString stringWithFormat:@"http://URL.4fx.co.uk/forms/AppForms/app_latest.ashx"];
                NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString: requestURL]];
                NSURLConnection *con =[[NSURLConnection alloc] initWithRequest:request delegate:self];

                if(con)
                {
                    self.CatData = [[NSMutableData alloc] init];
                    self.Category_Array = [[NSMutableArray alloc] init];
                }
                else
                {
                    [[[UIAlertView alloc] initWithTitle:@"Error" message:@"Failed to get connection. Please try again later" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil] show];
                }

            }
            - (void)didReceiveMemoryWarning
            {
                [super didReceiveMemoryWarning];
                // Dispose of any resources that can be recreated.
            }
            - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
            {
                [self.CatData setLength:0];
            }

            - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
            {
                [self.CatData appendData:data];
            }
            - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
            {

                [[[UIAlertView alloc] initWithTitle:@"Error" message:@"Failed to get connection. Please try again later"  delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil] show];


            }
            - (void)connectionDidFinishLoading:(NSURLConnection *)connection
            {
                NSString *temp = [[NSString alloc] initWithData:self.CatData encoding:NSUTF8StringEncoding];
                NSArray *jobs = [temp componentsSeparatedByString:@"||||"];
                NSMutableDictionary *temp_dict = [[NSMutableDictionary alloc] init];
                NSArray *jobInfo = [[NSArray alloc] init];
                int count = 0;
                for(int i = 1; i < [jobs count]; i++)
                {
                    jobInfo = [[jobs objectAtIndex:i] componentsSeparatedByString:@"||"];
                    @try {

                        temp_dict = [[NSMutableDictionary alloc]init];
                        [temp_dict setObject:[jobInfo objectAtIndex:0] forKey:@"Category"];
                        [self.Category_Array addObject:temp_dict];

                        //            NSDictionary *tempfile = [self.Category_Array objectAtIndex:i - 1];
                        //            [[[UIAlertView alloc] initWithTitle:@"Added to Cat" message:[tempfile objectForKey:@"Category"] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil] show];

                        count++;
                    }
                    @catch (NSException *exception) {

                        [[[UIAlertView alloc] initWithTitle:@"Exception Thrown" message:exception.reason delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil] show];
                    }
                }
                [_Category_Table reloadData];
            }


            //#pragma mark - Table view data source

            - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
            {

                // Return the number of sections.
                return 1;
            }

            - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
            {
                // Return the number of rows in the section.
                return [self.Category_Array count];
            }


            - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
            {
                static NSString *cellIdentifier = @"Cateogry_Cell";
                Cateogry_Cell * cell = (Cateogry_Cell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

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

                NSDictionary *temp = [self.Category_Array objectAtIndex:[indexPath row]];
                cell.Category_Cell_Label.text = [temp objectForKey:@"Category"];

                //[[[UIAlertView alloc] initWithTitle:@"In Table Function" message:[temp objectForKey:@"Category"] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil] show];

                return cell;
            }

            -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
            {
                if ([[segue identifier] isEqualToString:@"Cat_Cell_Push"])
                {
                    JobList_Table *DetailController = [segue destinationViewController];
                    NSIndexPath *MyIndexPath = [_Category_Table indexPathForSelectedRow];
                    int row = [MyIndexPath row];
                    DetailController.JobList_Array = @[_Category_Array[row]];


                }
            }

            @end
4

1 に答える 1

0

少し変更:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *cellIdentifier = @"Cateogry_Cell";
        Cateogry_Cell * cell = (Cateogry_Cell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

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

        NSDictionary *temp = [self.Category_Array objectAtIndex:[indexPath row]];
        cell.Category_Cell_Label.text = [temp objectForKey:@"Category"];

        //[[[UIAlertView alloc] initWithTitle:@"In Table Function" message:[temp objectForKey:@"Category"] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil] show];

        return cell;
    }

そうすることで、dequeue ...メソッドは、再利用できるセルが実際に存在するまで、常にnilを返します。これは、1つのセルが画面からスクロールされたときです。このメソッドが常にセルを返すようにしたい場合は、識別子とともにクラスを登録します。initメソッドまたはviewDidLoadで呼び出すことができます。

[self.tableView registerClass:[Category_Cell class] forCellReuseIdentifier:@"Cateogry_Cell"];

繰り返しになりますが、そのための定数をより適切に定義します。

于 2013-01-04T13:07:04.170 に答える