0

"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];
}

他のクラスの Edited メソッド:

- (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:];もう 1 つは次のとおりです。[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];

4

1 に答える 1

1

テーブル ビューにデータが入力されない場合、テーブル ビューはデータ ソースから必要なデータを取得していません。

のを作成した新しい に設定していないか、まだ のである可能性がdataSourceあります。tableViewNSObjectMasterViewdataSourcetableView

また、このメソッドが実際に呼び出され、渡さtableViewれたものがビューに表示されていることを確認してください。


編集: 3つの解決策があります:

  1. 作成した新しいオブジェクトにデータ ソースを割り当てて、テーブル ビューをデータで更新できるようにします。これは実際のデータが含まれているためです。
  2. 解析されたデータを に返すようにそのメソッドを調整し、MasterViewを呼び出します[self.tableView reloadData]しかし、これは MVC の観点からはあまり良くありません。
  3. 3 番目のオプションでは、UIVieControllerを処理するを作成する必要MasterViewがあり、それはdataSourceテーブル ビューの である必要があります。ビューコントローラーは、新しいオブジェクトから上記のメソッドを呼び出して、データを取得し、テーブルビューを更新する必要があります。つまり、2 番目のソリューションと同様ですが、View Controller はメソッドではなくメソッドを呼び出しますMasterView
于 2013-06-03T23:01:31.610 に答える