Iglistkit: Cannot use Generic Section Controllers with Constrained Type Variables

Created on 31 Jan 2017  路  3Comments  路  Source: Instagram/IGListKit

Hello,

I need to create multiple section controllers which differs in part of the cell setup but shares a lot of functionalities, and are all based on different subclasses of the model.

Hence I made a "abstract" Section Controller that owns a Generic "abstract" model
and then every other section controller is a subclass of it, with a subclass of the generic model.

I set it up like this:


class GenericSectionController<GenericType: ParentModelClass>

var model: GenericType?

public func didUpdate(to object: Any) {
    model = object as? GenericType
  }

and

class RealSectionController: GenericSegmentSectionController<ChildModelClass>

so I am using a Constrained Type Variables in order to be able to access the model properties automatically casted to the right type in different methods, but it crashes in Adapter.m

// now that the maps have been created and contexts are assigned, we consider the section controller "fully loaded"
    for (id object in updatedObjects) {
        [[map sectionControllerForObject:object] didUpdateToObject:object];
    }

with

2   CoreFoundation                      0x0000000103203f04 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132
    3   CoreFoundation                      0x0000000103119005 ___forwarding___ + 1013
    4   CoreFoundation                      0x0000000103118b88 _CF_forwarding_prep_0 + 120
    5   IGListKit                           0x0000000101a8a62d -[IGListAdapter updateObjects:] + 1405
    6   IGListKit                           0x0000000101a883dd -[IGListAdapter updateAfterPublicSettingsChange] + 170
    7   IGListKit                           0x0000000101a88250 -[IGListAdapter setDataSource:] + 88


but I can't understand if this is due to my code or if this is because the adapter is not able to cast the right controller from the generic one

question

All 3 comments

@racer1988 Can you post a sample project? It seems to me that your SCs do not confirm to IGListSectionType protocol. But need more info to find out.

Hi!

While preparing the sample project I managed to solve the issue which was due to how I was setting up the controllers and IGListKit was unable to access some IGListSectionType methods.
so now the crash is resolved.

However I am unable to use generics to reuse the code from the parent class with a child controller type. but that is not a IGListKit question :D

Thanks, sorry for the issue

@racer1988 woot! Glad its resolved.

Don't worry about opening issues, others might run into the same problem so its good to have all this info in one place 馃槃

Was this page helpful?
0 / 5 - 0 ratings