Problem with Category Leaf and Special Category

I am using the videoplayer example and I have successfully created a channel up to the point where I had two categories with one leaf each, and I had another “special category” that was an About Us page with some paragraph text. As soon as I created a second category leaf, it gave me errors on the Debugger:

BrightScript Debugger> ------ Running ------
created feed connection for https://s3.amazonaws.com/select-broadcasting/roku/UE
A/XML/categories1.xml
url: https://s3.amazonaws.com/select-broadcasting/roku/UEA/XML/categories1.xml
Took: 27ms
testing-dean
Current Function:
105: Function initCategoryList() As Void
106:
107:     conn = InitCategoryFeedConnection()
108:
109:     m.Categories = conn.LoadCategoryFeed(conn)
110:     m.Categories.Kids.Push({ Type: "About Us", ShortDescriptionLine1: "Abou
t Us", ShortDescriptionLine2: "Learn More about Theresa Garcia Ministry", HDPost
erUrl: "http://selectbroadcasting.org/roku/examples/source/SRBS/images/about-us-
HD.png", SDPosterUrl: "http://selectbroadcasting.org/roku/examples/source/SRBS/i
mages/about-us-SD.png" })
111:     m.CategoryNames = conn.GetCategoryNames(m.Categories)
112:
113: End Function
'Dot' Operator attempted with invalid BrightScript Component or interface refere
nce. (runtime error &hec) in ...pkg:/source/appHomeScreen.brs(110)

110:     m.Categories.Kids.Push({ Type: "About Us", ShortDescriptionLine1: "Abou
t Us", ShortDescriptionLine2: "Learn More about Theresa Garcia Ministry", HDPost
erUrl: "http://selectbroadcasting.org/roku/examples/source/SRBS/images/about-us-
HD.png", SDPosterUrl: "http://selectbroadcasting.org/roku/examples/source/SRBS/i
mages/about-us-SD.png" })
Backtrace:
Function initcategorylist() As
   file/line: /tmp/plugin/JCAAAAOJB8...pkg:/source/appHomeScreen.brs(110)
Function showhomescreen(screen As ) As Integer
   file/line: /tmp/plugin/JCAAAAOJB8...pkg:/source/appHomeScreen.brs(35)
Function main() As
   file/line: /tmp/plugin/JCAAAAOJB8iu/pkg:/source/appMain.brs(20)

Local Variables:
global   &h0020 rotINTERFACE:ifGlobal
m        &h0010 bsc:roAssociativeArray, refcnt=4
conn     &h0010 bsc:roAssociativeArray, refcnt=1
BrightScript Debugger>

My HomeScreen.brs is setup this way:

Function preShowHomeScreen(breadA=invalid, breadB=invalid) As Object

    if validateParam(breadA, "roString", "preShowHomeScreen", true) = false return -1
    if validateParam(breadA, "roString", "preShowHomeScreen", true) = false return -1

    port=CreateObject("roMessagePort")
    screen = CreateObject("roPosterScreen")
    screen.SetMessagePort(port)
    if breadA<>invalid and breadB<>invalid then
        screen.SetBreadcrumbText(breadA, breadB)
    end if

    screen.SetListStyle("flat-category")
    screen.setAdDisplayMode("scale-to-fit")
    return screen

End Function

'******************************************************
'** Display the home screen and wait for events from 
'** the screen. The screen will show retreiving while
'** we fetch and parse the feeds for the game posters
'******************************************************
Function showHomeScreen(screen) As Integer

    if validateParam(screen, "roPosterScreen", "showHomeScreen") = false return -1

    initCategoryList()
    screen.SetContentList(m.Categories.Kids)
    screen.SetFocusedListItem(0)
    screen.Show()

    while true
        msg = wait(0, screen.GetMessagePort())
        if type(msg) = "roPosterScreenEvent" then
            print "showHomeScreen | msg = "; msg.GetMessage() " | index = "; msg.GetIndex()
            if msg.isListFocused() then
                print "list focused | index = "; msg.GetIndex(); " | category = "; m.curCategory
            else if msg.isListItemSelected() then
                print "list item selected | index = "; msg.GetIndex()
                kid = m.Categories.Kids[msg.GetIndex()]
		if kid.type = "About Us" then
                    ShowParagraphScreen()
		else
		 displayCategoryPosterScreen(kid)
                end if
            else if msg.isScreenClosed() then
                return -1
            end if
        end If
    end while

    return 0

End Function

'**********************************************************
'** When a poster on the home screen is selected, we call
'** this function passing an associative array with the 
'** data for the selected show.  This data should be 
'** sufficient for the show detail (springboard) to display
'**********************************************************
Function displayCategoryPosterScreen(category As Object) As Dynamic

    if validateParam(category, "roAssociativeArray", "displayCategoryPosterScreen") = false return -1
    screen = preShowPosterScreen(category.Title, "")
    showPosterScreen(screen, category)

    return 0
End Function

'**********************************************************
'** Special categories can be used to have categories that
'** don't correspond to the content hierarchy, but are
'** managed from the server by data from the feed.  In these
'** cases we might show a different type of screen other
'** than a poster screen of content. For example, a special
'** category could be search, music, options or similar.
'**********************************************************
Function displaySpecialCategoryScreen() As Dynamic

    if validateParam(category, "roAssociativeArray", "displayCategoryPosterScreen") = false return -1
    screen = preShowPosterScreen(category.Title, "")
    showPosterScreen(screen, category)

   
    return 0
End Function

'************************************************************
'** initialize the category tree.  We fetch a category list
'** from the server, parse it into a hierarchy of nodes and
'** then use this to build the home screen and pass to child
'** screen in the heirarchy. Each node terminates at a list
'** of content for the sub-category describing individual videos
'************************************************************
Function initCategoryList() As Void

    conn = InitCategoryFeedConnection()
	
    m.Categories = conn.LoadCategoryFeed(conn)
    m.Categories.Kids.Push({ Type: "About Us", ShortDescriptionLine1: "About Us", ShortDescriptionLine2: "Learn More about Theresa Garcia Ministry", HDPosterUrl: "http://selectbroadcasting.org/roku/examples/source/SRBS/images/about-us-HD.png", SDPosterUrl: "http://selectbroadcasting.org/roku/examples/source/SRBS/images/about-us-SD.png" })
    m.CategoryNames = conn.GetCategoryNames(m.Categories)
        
End Function

Does anyone have any insight as to what might be happening here.

Thanks!
Dean

I guess you can’t do this:

    m.Categories.Kids.Push({ Type: "About Us", ShortDescriptionLine1: "About Us", ShortDescriptionLine2: "Learn More about Theresa Garcia Ministry", HDPosterUrl: "http://selectbroadcasting.org/roku/examples/source/SRBS/images/about-us-HD.png", SDPosterUrl: "http://selectbroadcasting.org/roku/examples/source/SRBS/images/about-us-SD.png" })

You probably need to create an object first, assign the values, then push that object into m.Categories.Kids.

Or maybe it’s just a matter of syntax and you can do that, but I’d look at how the other (non-special) Kids are generated and emulate that.
Update: I took a look at the example and it’s pretty tricky with the recursive calls to ‘ParseCategoryNode’ . I think the easiest way would be by putting the special category into the xml and look at categoryFeed.brs starting at

elseif name = "specialCategory" then

(line 192 in the version i have), adjust to your needs.