2015-04-28 3 views
4
func retrieveMessages() { 

    var query:PFQuery = PFQuery(className: "Message") 

    //Call findobjectsinbackground 

    query.findObjectsInBackgroundWithBlock { (objects:[AnyObject]?, error:NSError?) -> Void in 

     self.messagesArray = [String]() 
     for messageObject in objects { <<<<<<<<<<<<<<<<< error 
      let messageText:String? = (messageObject as PFObject)["Text"] as? String 
      if messageText != nil { 
       self.messagesArray.append(messageText!) 
      } 
     } 
     self.messageTableView.reloadData() 
    } 
} 

С помощью этого кода возникает ошибка: [AnyObject]? does not have a member named 'Generator'. Есть ли способ исправить это?[AnyObject]? ' не имеет члена под названием «Генератор»

+0

Пожалуйста, правильно отформатируйте код. –

+0

@returntrue Редактирование уже находится в очереди, ожидающей утверждения. – Michal

+0

@Pondpoud Помог ли вам хоть один из ответов? Если да, можете ли вы принять тот, который имеет? В противном случае вам нужна помощь? – Michal

ответ

2

Это потому, что это дополнительный массив. Просто оберните его вокруг if let, и со мной все будет в порядке.

В детской площадке:

func retrieveMessages(objects:[AnyObject]?) { 
    var messagesArray = [String]() 

    if let objs = objects { 
     for messageObject in objs { 
      let messageText:String? = "test" 
      if messageText != nil { 
       messagesArray.append(messageText!) 
      } 
     } 
    } 
} 

В вашем случае, полный код будет выглядеть так:

func retrieveMessages() { 
    var query:PFQuery = PFQuery(className: "Message") 

    query.findObjectsInBackgroundWithBlock { (objects:[AnyObject]?, error:NSError?) -> Void in 

     self.messagesArray = [String]() 

     if let objs = objects { 
      for messageObject in objs { 
       let messageText:String? = (messageObject as PFObject)["Text"] as? String 
       if messageText != nil { 
        self.messagesArray.append(messageText!) 
       } 
      } 
     } 

     self.messageTableView.reloadData() 
    } 
} 
+1

спасибо за подробный ответ. Это помогло. –

+0

Нет проблем, просто убедитесь, что пометили его как ответ, который вы использовали. Чтобы убедиться, что это не выглядит как без ответа :-) – Michal

11

Ваш objects массив объявлен как Факультативно: objects:[AnyObject]?

Так вам нужно развернуть его перед циклом над ним:

for messageObject in objects! { 
    // do stuff 
} 

objects И так может быть ноль, лучше это сделать:

if let myObjects = objects { 
    for messageObject in myObjects { 
     // do stuff 
    } 
} 
+0

Ребята, это работает, потрясающе, я застрял в этой ошибке в течение двух часов. благодаря –

0

[AnyObject]? это необязательный массив.

Перед использованием его необходимо развернуть.

if let objects = objects 
{ 
    for messageObject in objects 
    { 
    .... 
    } 
} 
1

Поскольку ваши объекты Array имеют [AnyObject] ?, перед их использованием вам нужно сделать ниже шага.

if let myObjects = objects as? [PFObject] { 
    //Do the things... 
} 
Смежные вопросы