转移到另一个类时,方法不起作用

时间:2013-06-03 22:56:57

标签: ios objective-c cocoa-touch

我的“MasterView”()类中有一个方法,它从URL解析.json数据,然后用信息填充表视图。为了更有条理,并将方法与其他所需方法分组,我试图将其移动到另一个NSOject类中,但它不起作用;没有错误,没有例外表视图根本不填充。

以下是“大师班”中的原始方法

- (void) fetchPosts:  
{
    NSError *error;

    NSData *responseData = [NSData dataWithContentsOfURL:myURL];

    NSDictionary *json = [NSJSONSerialization
                      JSONObjectWithData:responseData

                      options:kNilOptions
                      error:&error];

    NSArray *objects = [[json objectForKey:@"data"] objectForKey:@"children"];

    arr = [[NSMutableArray alloc] init];

    for (NSDictionary *object in objects) {
        NSString *title = [[object objectForKey:@"data"] objectForKey:@"title"];

        //Post is just a random NSObject Class
        Post *post = [[Post alloc] init];
        post.title = title;
        [arr addObject:post];
    }

    NSLog(@"Called");
    [self.tableView reloadData];
}

其他课程中的编辑方法:

- (void) fetchPosts:(NSURL *)myURL withPostArray:(NSMutableArray*)postArr andTableView: (UITableView*)tableView
{
   NSLog(@"CAlled");

    NSError *error;

    NSData *responseData = [NSData dataWithContentsOfURL:myURL];

    NSDictionary *json = [NSJSONSerialization
                      JSONObjectWithData:responseData

                      options:kNilOptions
                      error:&error];

    NSArray *objects = [[json objectForKey:@"data"] objectForKey:@"children"];

    postArr = [[NSMutableArray alloc] init];

    for (NSDictionary *object in objects) {
        NSString *title = [[object objectForKey:@"data"] objectForKey:@"title"];

        Post *post = [[Post alloc] init];
        post.title = title;
        [postArr addObject:post];
    }


    [tableView reloadData];
}

可以使用原始方法:[self fetchPosts:];另一个是:[MyClass fetchPosts:myUrl withPostArray:arr andTableView:self.tableView];

我编辑了一些信息以使其更具可读性,如果有任何错误,请告诉我。

MyClass.h:

@interface MyClass : NSObject <UITableViewDelegate, UITableViewDataSource>

在MasterView中设置数据源:

//In ViewDidLoad
_delegate = myClass;

self.tableView.dataSource = _delegate;
self.tableView.delegate = _delegate;

//In .h 

@property (strong, nonatomic) MyClass *delegate;

当我致电[MyClass fetchPosts:myUrl withPostArray:arr andTableView:self.tableView];

时,我从编译器中得不到任何结果

1 个答案:

答案 0 :(得分:1)

如果表视图未填充,则表视图无法通过数据源获取所需数据。

您可能没有将dataSource的{​​{1}}设置为您创建的新tableView,或NSObject仍然是MasterView dataSource

另外,请确保实际调用此方法,并且传递的tableView是视图中显示的方法。


修改:您有三种解决方案:

  1. 将数据源分配给您创建的新对象,以便它处理用数据更新表视图,因为它现在具有实际数据。
  2. 调整该方法,将解析后的数据返回tableView,然后调用MasterView但从MVC的角度来看,这并不是很好。
  3. 第三个选项要求您创建一个[self.tableView reloadData]来处理您的UIVieController,它应该是表格视图的MasterView。视图控制器应该从新对象调用所述方法,以检索数据并更新表视图。 即。像第二个解决方案,但视图控制器将调用方法而不是dataSource