2014-01-08 40 views
1

我試圖使用(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object來自定義數據的顯示PFQueryTableViewController。因此,我在我的PFQueryTableViewControllerdelegate中構建了我的PFQuery對象(PFQuery *)queryForTable,該對象應該獲得NSArray中的多個對象。parse.com PFQueryTableViewController多次返回相同的對象

我認爲parse.com應該然後發送/呼叫(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object一次爲每個返回的對象。但是,我發現它多次不斷返回對象。

因此,例如,3次調用(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object而不是3個不同的對象被調用時,我得到相同的對象。但它不是與數據或查詢一個問題,因爲在(PFQuery *)queryForTable年底,就在

return query; 

我試圖

[query findObjectsInBackgroundWithBlock:^(NSArray *resultsNow,NSError *error) {NSLog(@"We have the following: %@", resultsNow);}]; 
sleep(5); 

,這表明正確獲得了3個對象。那麼如何確切地相同的查詢時由PFQueryTableViewController處理查詢3次,而不是逐個發送3個對象,它發送第一個3次?

針對北斗星的問題,我加了一些答案在評論中,也有以下似乎相關:

- (PFObject *)objectAtIndex:(NSIndexPath *)indexPath { 
// overridden, since we want to implement sections 
if (indexPath.section < self.objects.count) { 
    return [self.objects objectAtIndex:indexPath.section]; 
} 

return nil; 
} 
+1

發送了哪些索引路徑?提供給'objectsDidLoad:'/提供給'objects'的東西是什麼? – Wain

+0

謝謝,Wain,這是個好問題。乍一看,它看起來像objectsDidLoad:只是調用超級和像'self.tableView.tableHeaderView = nil;'和'self.tableView.scrollEnabled = YES;'這應該沒有什麼區別,但我會探討那更多。 – auspicious99

+0

至於索引路徑,它們是(按順序,第一,第二和第三次),' 2個索引[0,0]',' 2個索引[1,0]'和' 2個索引[0,0]' – auspicious99

回答

1

感謝Wain的問題,我記錄了objectsDidLoad:並發現正確的3個對象正在加載,所以它必須是PFQueryTableViewController的問題,而不是按照正確的順序在(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object中加載它們。

特別是,映射應該在-(PFObject *)objectAtIndex:(NSIndexPath *)indexPath,如我的問題所示。但是在第N次查看文檔時,我突然注意到方法名稱實際上應該是-(PFObject *)objectAtIndexPath:(NSIndexPath *)indexPath。難怪它沒有被調用,並且我的映射正在生效,因此錯誤的對象被傳遞到(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object。當我將其更改爲-(PFObject *)objectAtIndexPath:(NSIndexPath *)indexPath時,問題就消失了!

我怎麼能得到錯誤的方法名?我發現我已經從anypic代碼中複製了這個映射示例,所以我猜測parse.com在anypic被寫入後的某個時候更改了方法名稱?任何人都可以驗證嗎?我正在使用解析框架1.2.14

2

我也有類似的問題,我所做的就是:

1 - 相反使用PFQueryTableViewController只是使用常規UITableViewController

2 - 將方法queryForTable:更改爲(void)

- (void)queryForTable {

3 - 刪除PFQueryTableView方法和實施DataSource方法。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
    } 
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
    { 
    } 
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
    { 
    } 

呼叫[self queryForTable]viewDidLoad在.h文件中聲明之後。

如果你不使用塊,你只需要創建NSArrayproperty並填充上queryForTable

self.yourarray = [query findobjects];

如果你使用塊,只要確保你填充NSArray內塊和重裝的tableview。

[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 

    if (error) { 
     // There was an error, do something with it. 
    } 
    else { 
     self.yourArray = objects; 
    } 
    // Reload your tableView Data 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [self.tableView reloadData]; 
    }); 
}]; 

這就是我如何得到它的工作。希望能幫助到你。

+1

感謝豪爾赫,但我寧願能夠讓PFQueryTableViewController工作,如果可能的話,因爲它帶有一些其他的便利。 – auspicious99