2016-06-26 11 views
0

英語はよくわかりません。このエラーをコードで説明しようとします。エラー:致命的なエラー:インデックスが範囲外です。xcode swift 2

DBContextDelagate

import Foundation 
import UIKit 
import Parse 

@objc protocol DBContextDelegate { 
    optional func SingUpResponse(result : Bool) 
    optional func LoginResponse(result : Bool) 
    optional func GetUsersInfoResponse(result : AnyObject) 
    optional func GetUsersInfo(result : Bool) 
    optional func GetDataResponse(result : Bool) 
} 

class DBContext : UIViewController{ 


    var delegate : DBContextDelegate? 

    func SingUp(user : User) { 
     let pfUser = PFUser() 
     pfUser.username = user.userUserName 
     pfUser.password = user.userPassword 
     pfUser.email = user.userEmail 
     pfUser["fullname"] = user.userFullName 


     let profilePhotoData = UIImageJPEGRepresentation(user.userProfilePhoto, 0.5) 
     let profilePhotoFile = PFFile(name: "profilePhoto.jpg", data: profilePhotoData!) 
     pfUser["profilePhoto"] = profilePhotoFile 


     pfUser.signUpInBackgroundWithBlock { (success:Bool, error:NSError?) -> Void in 

      if (error != nil) { 
       self.delegate?.SingUpResponse!(false) 
       print(error) 
      }else { 
       self.delegate?.SingUpResponse!(true) 

      } 
     } 

    } 

    func Login(user:User){ 

      PFUser.logInWithUsernameInBackground(user.userUserName, password:user.userPassword) { 
       (user: PFUser?, error: NSError?) -> Void in 
       if user != nil { 
        self.delegate?.LoginResponse!(true) 
       } else { 
        self.delegate?.LoginResponse!(false) 
       } 
      } 
     } 

    func GetUsersInfo(){ 

     var userArray = Array<UserInfo>() 

     let query = PFUser.query() 
     query!.findObjectsInBackgroundWithBlock { 
      (objects:[PFObject]?, error:NSError?) -> Void in 

      if error == nil { 

      if let objects = objects { 

       for object in objects { 
        let user = UserInfo() 

        user.userID = object.objectId! 
        user.userUserName = object["username"] as? String 
        user.userFullName = object["fullname"] as? String 
        user.userEmail = object["email"] as? String 

        let userPhoto = object["profilePhoto"] as! PFFile 
        userPhoto.getDataInBackgroundWithBlock { (data:NSData?, error:NSError?) -> Void in 
         user.userProfilePhoto = UIImage(data: data!)! 
        } 

        userArray.append(user) 
        print(userArray.count) 

       } 
       self.delegate?.GetUsersInfoResponse!(userArray) 
       } 
       self.delegate?.GetDataResponse!(true) 
      } else { 
       self.delegate?.GetDataResponse!(false) 
      } 
     } 

    } 
} 

そしてHomeVC CollectionView

import UIKit 
import Parse 


class homeVC: UICollectionViewController,DBContextDelegate{ 

    var userInfoArray : [UserInfo] = [UserInfo]() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     collectionView?.backgroundColor = .whiteColor() 

     self.navigationItem.title = PFUser.currentUser()?.username?.uppercaseString 

     Singleton.sharedInstance.dbContext.delegate = self 
     Singleton.sharedInstance.dbContext.GetUsersInfo() 
     print("ViewDidLoad: \(userInfoArray.count)") 
    } 


    func GetUsersInfoResponse(result: AnyObject) { 
     userInfoArray = result as! [UserInfo] 
    } 

    func GetDataResponse(result: Bool) { 
     if result == true { 
     }else { 
      print("Olmadı") 
     } 
    } 


    override func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView { 

     let header = collectionView.dequeueReusableSupplementaryViewOfKind(UICollectionElementKindSectionHeader, withReuseIdentifier: "HeaderView", forIndexPath: indexPath) as! headerVC 
     //I have problem with this line index out of range 
     let user = userInfoArray[indexPath.row] 
     header.fullnameLbl.text = user.userFullName 

     header.editProfileButton.setTitle("Profili Düzenle", forState: UIControlState.Normal) 

     return header 
    } 




    override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int { 
     return 1 
    } 


    override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
     return 0 
    } 

} 
+0

多くのコードです。つまり、無楽しい読書をそれを理解する。だから、さらに情報を伝える必要があります。このエラーはどこで起こりますか?あなたはそれをデバッグしようとしましたか? – DarkDust

+0

また、取得している_exact_エラーメッセージは何ですか? – DarkDust

+0

私はhomeVC Collection View.swifクラスでエラーメッセージを受け取ります。そして //範囲外のこのラインインデックスに問題があります let user = userInfoArray [indexPath.row] –

答えて

1

私は完全にあなたが補足ビューはなく、正常な細胞を返していることを逃しました。これらのビューは、セクションごとに返されます。 numberOfSectionsInCollectionViewは配列が空でも1を返します。約束した1セクションに対してcollectionView(collectionView:viewForSupplementaryElementOfKind:atIndexPath)メソッドが呼び出されるとクラッシュします。

ソリューションは、これを行うためにあるかもしれない

override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int { 
    return userInfoArray.count 
} 

また、あなたが基になるデータを変更するとコレクションビューをリロードしてください:

func GetUsersInfoResponse(result: AnyObject) { 
    userInfoArray = result as! [UserInfo] 
    collectionView?.reloadData() 
} 
関連する問題