将CollectionView连接到ViewController,连接dataSource-Swift-XCode时遇到错误

时间:2015-07-13 16:00:47

标签: ios iphone swift

我可以连接委托,但是,在连接数据源时,我收到以下错误:

  

2015-07-13 16:45:17.529 paintApp [4628:168318] - [UIView collectionView:numberOfItemsInSection:]:无法识别的选择器发送到实例0x7f8a12651c60   2015-07-13 16:45:17.539 paintApp [4628:168318] *由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [UIView collectionView:numberOfItemsInSection:]:无法识别的选择器发送到实例0x7f8a12651c60'   * 第一次抛出调用堆栈:   (       0 CoreFoundation 0x0000000107f67b75 exceptionPreprocess + 165       1 libobjc.A.dylib 0x0000000109cf7bb7 objc_exception_throw + 45       2 CoreFoundation 0x0000000107f6ec8d - [NSObject(NSObject)doesNotRecognizeSelector:] + 205       3 CoreFoundation 0x0000000107ec66fc ___ forwarding _ + 988       4 CoreFoundation 0x0000000107ec6298 _CF_forwarding_prep_0 + 120       5 UIKit 0x00000001090a5286 - [UICollectionViewData _updateItemCounts] + 296       6 UIKit 0x00000001090a7469 - [UICollectionViewData numberOfSections] + 22       7 UIKit 0x000000010909158e - [UICollectionViewFlowLayout _getSizingInfos] + 348       8 UIKit 0x0000000109092689 - [UICollectionViewFlowLayout _fetchItemsInfoForRect:] + 526       9 UIKit 0x000000010908deff - [UICollectionViewFlowLayout prepareLayout] + 257       10 UIKit 0x00000001090a53f0 - [UICollectionViewData _prepareToLoadData] + 67       11 UIKit 0x00000001090a5ac9 - [UICollectionViewData validateLayoutInRect:] + 54       12 UIKit 0x000000010906e198 - [UICollectionView layoutSubviews] + 170       13 UIKit 0x0000000108ab3303 - [UIView(CALayerDelegate)layoutSublayersOfLayer:] + 521       14 QuartzCore 0x000000010d463de8 - [CALayer layoutSublayers] + 150       15 QuartzCore 0x000000010d458a0e _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 380       16 QuartzCore 0x000000010d45887e _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24       17 QuartzCore 0x000000010d3c663e _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 242       18 QuartzCore 0x000000010d3c774a _ZN2CA11Transaction6commitEv + 390       19 UIKit 0x0000000108a3795d - [UIApplication _reportMainSceneUpdateFinished:] + 44       20 UIKit 0x0000000108a3866a - [UIApplication _runWithMainScene:transitionContext:completion:] + 2684       21 UIKit 0x0000000108a37005 - [UIApplication workspaceDidEndTransaction:] + 179       22 FrontBoardServices 0x000000010c58d253 31- [FBSSerialQueue performAsync:] _ block_invoke + 16       23 CoreFoundation 0x0000000107e9c9bc __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK + 12       24 CoreFoundation 0x0000000107e92705 __CFRunLoopDoBlocks + 341       25 CoreFoundation 0x0000000107e924c5 __CFRunLoopRun + 2389       26 CoreFoundation 0x0000000107e91906 CFRunLoopRunSpecific + 470       27 UIKit 0x0000000108a36a72 - [UIApplication _run] + 413       28 UIKit 0x0000000108a39870 UIApplicationMain + 1282       29 paintApp 0x0000000107d7272e top_level_code + 78       30 paintApp 0x0000000107d7276a main + 42       31 libdyld.dylib 0x000000010a4d3145 start + 1       32 ??? 0x0000000000000001 0x0 + 1   )   libc ++ abi.dylib:以NSException类型的未捕获异常终止   (lldb)

这是我的视图控制器类:

import UIKit

class ViewControllerGallery: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {

var tableData: [String] = ["img1" , "img2"]
var tableImages: [String] = ["file1.png", "file2.png"]

var collectionView: UICollectionView!

override func viewDidLoad() { 
    super.viewDidLoad() 
    collectionView = UICollectionView(frame: self.view.frame) 
    collectionView.dataSource = self 
    collectionView.delegate = self 
    collectionView.registerClass(UICollectionViewCell.self,     forCellWithReuseIdentifier: "Cell")

    self.view.addSubview(collectionView) 

    // Do any additional setup after loading the view. 

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return tableData.count
}


func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell : ColViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath : indexPath) as ColViewCell
    cell.labelCell.text = tableData[indexPath.row]
    cell.imgCell.image = UIImage(named : tableImages[indexPath.row])
    return cell //UICollectionViewCell()
}


func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
    println("Cell \(indexPath.row) selcted")
}

}

这是我的'细胞'类,它将细胞图像和标签连接到:

import UIKit

class ColViewCell: UICollectionViewCell {

@IBOutlet var imgCell: UIImageView!

@IBOutlet var labelCell: UILabel!

}

1 个答案:

答案 0 :(得分:4)

你的错误足够自我解释。在适当的位置,您设置collectionView.dataSource的地方有错误来源 - 而不是实施UICollectionViewDataSource的内容,您设置了UIView个实例。

我想,你需要像

这样的东西
override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
    collectionView.dataSource = self;
 }