• Register
0 votes
1.1k views

Problem :

I have recently started learning about UICollectionView. I am very new to programming. I have also added the same UICollectionView by code to my App. I know that the CollectionCell is the custom class of the UICollectionViewCell.
But my app is now crashing with the following message: 

UICollectionView must be initialized with a non-nil layout parameter.”
I am tirelessly working to fix above error from many days but still unable to fix it. Is it possible for someone to help me in fixing above error?

8 5 2
3,230 points

Please log in or register to answer this question.

2 Answers

1 vote

Solution :
 

I can help you with this error. Your error message is clearly telling you about what is going wrong with your code:

If you get a chance to check the documentation related to UICollectionView, Then you will surely realize that the only initializer is you can find is initWithFrame:collectionViewLayout:. In your parameters for your initialize please stick to below rules:

A frame rectangle for your collection view which is measured in points. And the origin of your frame is relative to a superview in which you want to add it. Please note this frame is passed to your superclass during the initialization.

And a layout object is used for organizing items. Your collection view always stores the very strong reference to your specified object and it should not be nil.

So my suggestion is you should use the initWithFrame:collectionViewLayout: to initialize the UICollectionView, and you must make sure that you are passing it the non-nil UICollectionViewLayout object.

8 4
5,680 points
0 votes

Solution:

The crash is saying you pretty apparently what is going wrong:

UICollectionView should be initialized by a non-nil layout parameter.

In case you control the documentation for UICollectionView, you'll trace that the solely initializer is initWithFrame:collectionViewLayout:. Moreover, in the parameters for that initializer, you'll see:

frame

The frame rectangle for the recruitment sight, surveyed in points. The root of the frame is comparative to the super view in which you scheme to include it. This frame is received to the super class at the time of initialization.

layout

The layout object to use with a view to  forming items. The collection sight stocks a strong reference to the marked object. It should not be nil.

I've bolded the significant portion. You should exercise initWithFrame:collectionViewLayout: to initialize your UICollectionView, and you should  exceed it a non-nil UICollectionViewLayout object.

One methos to correct this, then, would be to just change the order of initialization you do:

UICollectionViewFlowLayout* flowLayout = [[UICollectionViewFlowLayout alloc] init];
flowLayout.itemSize = CGSizeMake(100, 100);
[flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
self.collectionView = [[UICollectionView alloc] initWithFrame:self.view.frame collectionViewLayout:flowLayout];
[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cell"];

Note: 

 In the above instance, I've learned you want to exercise self.view.frame as the frame of self.collectionView. In case that's not the instance, put in  whatever frame you want instead.

Swift 3.0 and Swift 4.0

UICollectionView

The app crashed as soon as it launched at the time UICollectionView is initialised

initialize  (above viewDidLoad)

let alarmCollectionView:UICollectionView = UICollectionView(frame: CGRect.zero, collectionViewLayout: UICollectionViewFlowLayout.init())
let layout:UICollectionViewFlowLayout = UICollectionViewFlowLayout.init()

In Method (inside viewDidLoad)

layout.scrollDirection = UICollectionViewScrollDirection.vertical
alarmCollectionView.setCollectionViewLayout(layout, animated: true)
alarmCollectionView.delegate = self
alarmCollectionView.dataSource = self
alarmCollectionView.backgroundColor = UIColor.clear
self.addSubview(alarmCollectionView)

It was worked fine after initialising like this.  I am employing Autolayout so using CGRect.zero or use your own CGRect

UICollectionViewController

In case  you are employing UICollectionViewController instead of UICollectionView you require to include layout at the time initialization

 let  testNavController:UINavigationController = UINavigationController.init()
 let layout:UICollectionViewFlowLayout = UICollectionViewFlowLayout.init() 
 let collectionView:UICollectionViewController = UICollectionViewController.init(collectionViewLayout:layout )              
 testNavController.pushViewController(collectionView, animated: true)

Can employing UICollectionViewDelegateFlowLayout and don't forget to fix your cell size

class YourViewController : UICollectionViewController, UICollectionViewDelegateFlowLayout {
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize.init(width: view.frame.width, height: 250)
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        self.collectionView!.register(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)
    }
    // initialized with a non-nil layout parameter
    init() {
        super.init(collectionViewLayout: UICollectionViewFlowLayout())
    }    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

Perhaps at the time you offer your ChatViewController you have something like:

let chatVC = ChatViewController()

However, according to Apple doc:

class UICollectionViewController

At the time  you initialize the controller, employing the init(collectionViewLayout:) method, you mark the layout the collection view should have.

So you require:

let chatVC = ChatViewController(collectionViewLayout: UICollectionViewFlowLayout())

Apart from instantiating the vc with

shootDaysCollectionView()

Employ

shootDaysCollectionView(collectionViewLayout: UICollectionViewFlowLayout())

In case you want to configure

let lay = UICollectionViewFlowLayout()

lay...

shootDaysCollectionView(collectionViewLayout:lay)

 

10 6 4
31,120 points

Related questions

0 votes
1 answer 195 views
195 views
Problem: I am naive to C++. I have written code in C++ with the help of online tutorials. But I am facing the below C++ error if I try to execute my code: Array must be initialized with a brace enclosed initializer. I am receiving the above error from the ... + code: int cipher[Array_size][Array_size] = 0; Do you see any problem in my above line of code? Please explain to me the above error.
asked Sep 8, 2020 Raphael Pacheco 4.9k points
0 votes
1 answer 756 views
756 views
Problem : Facing following Swift issue must register a nib or a class for the identifier or connect a prototype cell in a storyboard
asked Nov 15, 2019 peterlaw 6.9k points
0 votes
1 answer 267 views
267 views
Problem: I am trying to archive my project but facing very unexpected error as shown below: Showing Recent Messages:-1: mkdir -p /Users/spritzindia/Library/Developer/Xcode/DerivedData/Contigo-atftiouzrdopcmcpprphpilawwzm/Build/Products/Debug-iphonesimulator/Contigo.app/Frameworks Showing ... : pod 'IQKeyboardManagerSwift'  pod 'SDWebImage', '~> 4.0'  pod 'KRPullLoader'  pod 'Paytm-Payments'
asked Aug 25, 2020 Raphael Pacheco 4.9k points
0 votes
1 answer 133 views
133 views
Problem : I have very simple program HelloWorld is running on iOS. The same program has been running fine for a long time. But recently I noticed that I get the below listed BoringSSL error when my program runs on my ... boringssl_session_errorlog: line 2871 [boringssl_session_read] SSL_ERROR_ZERO_RETURN(6): operation failed because the connection was cleanly shut down with a close_notify alert
asked Dec 4, 2019 alecxe 7.5k points
0 votes
1 answer 143 views
143 views
Problem : Since I upgraded the existing project with the iOS 9, I keep getting the below error : “An SSL error has occurred and a secure connection to the server cannot be made.”
asked Jan 4, 2020 alecxe 7.5k points
0 votes
1 answer 43 views
43 views
Problem: I am trying to migrate my project to swift 3 and am facing the following problem. I believe this was caused after starting the module update. I am using Xcode 8.2.1. ld: file not found: / Users / tomfox / Library / Developer ... tomfox / Library / Developer / Xcode / DerivedData / Flick_Quiz-ergbsdsnlpucndfmjqybgarjwaam / Build / Products / Debug-iphonesimulator / Flick Quiz.app/.gitkeep
asked Dec 5, 2020 sasha 13.2k points
0 votes
1 answer 90 views
90 views
Problem : All of a sudden I am unable to build my project. I started to get the following compiler error: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/ibtool failed with exit code 255 I got this error for a lot of my xib files. Any clues what is happening and what will be the Solution for it? Please Note : I am using Xcode 4.6 and iOS 6.1.
asked Nov 20, 2019 peterlaw 6.9k points
0 votes
1 answer 6 views
6 views
Problem: the operation couldn’t be completed. (osstatus error -47.)
asked Feb 19 Dan phillip 1.9k points
0 votes
1 answer 6 views
6 views
Problem: development cannot be enabled while your device is locked.
asked Feb 18 charles mathews 3.8k points