2015-10-15 41 views
0

我想調用一個Parse CloudCode函數並接收一個數組作爲響應。不幸的是我的iOS應用程序崩潰。它認爲我不正確地匹配來自Parse的返回類型。不幸的是,我對這個部隊的知識 - 我的意思是Java - 是有限的。如何從Parse CloudCode查詢返回數組?

的iOS代碼:

[PFCloud callFunctionInBackground:@"storyReadCount" 
        withParameters:@{} 
          block:^(NSArray *results, NSError *er) 
{ 
    if (er) { 
     NSLog(@"the error is %@", er); 
    }else{ 
     if (results.count > 0) { 
      //iterate through results adding story objects to array 
      for (int lCounter = 0; lCounter < results.count; lCounter ++) { 
       PFObject *singleObject = [results objectAtIndex: lCounter]; 
       RSSStory *singleStory = [[RSSStory alloc] init]; 
       singleStory.link = [singleObject objectForKey: @"link"]; 
       singleStory.readCount = [singleObject objectForKey: @"count"]; 
       singleStory.loveCount = [singleObject objectForKey: @"heart"]; 
       [array addObject: singleStory]; 
             } 
      _totalStoryReadCount = array; 
      [[NSNotificationCenter defaultCenter] postNotificationName: @"PriorStoryCountLoaded" object: nil]; 
      } 
    } 
} 
]; 

解析CloudCode:

 //gets and returns array containing number of times each article has been read 
Parse.Cloud.define("storyReadCount", function(request, response) { 
        var query = new Parse.Query("Story"); 
        query.descending("createdAt"); 
        query.exists("link"); 
        query.limit (100); 
        query.find({ 
           success: function(results) { 
           response.success(results); 
           }, 
           error: function(error) { 
           response.error("Failed"); 

           } 
           }) 
           } 
        ); 

我發誓這是一天正常工作。我評論說,如果(err)else block來驗證沒有邏輯錯誤,但在此之前發生崩潰。似乎

崩潰錯誤消息到變化,但一些變化:__NSDate UTF8字符串]:無法識別的選擇發送到實例。我也偶爾在崩潰日誌中看過_NSTaggedDate。

我也試圖改變:

block:^(NSArray *results, NSError *er) 

block:^(NSString *results, NSError *er) 

block:^(PFObject *results, NSError *er) 

和樂趣我想:

block:^(NSDate *results, NSError *er) 
+0

才能添加找到發生崩潰的行的異常斷點?如果我不得不猜測,我會說你的一個自定義類 - 也許是RSSStory - 聲明瞭一個NSString類型的屬性,你的解析數據已經定義爲一個日期。 – danh

+0

看來問題在於CloudCode部分。我猜測我沒有正確格式化查詢結果,然後再返回它們。如果我改變\t \t \t \t \t \t \t response.success(results); 至 response.success(「Harray」); 它不會崩潰。 –

回答

0

這裏是解決我的問題:

要我cloudCode查詢添加:

 query.include("UserID"); 
0

以下是如何從雲查詢返回結果,使用的承諾...

Parse.Cloud.define("storyReadCount", function(request, response) { 
    var query = new Parse.Query("Story"); 
    query.descending("createdAt"); 
    query.exists("link"); 
    query.limit (100); 
    query.find().then(function(results) { 
     response.success(results); 
    }, function(error) { 
     response.error(error); 
    }); 
});