SOLVED Clicked on Views Icon- now robofont crashes on open.

  • I had a UFO open, and clicked one of the "Views" icons. Robofont crashed, and now I cannot open UFOs.

    I'm running MacOS High Sierra.

    I've deleted RoboFont, all .py, preferences and Mechanic master extensions. I've restarted my machine. Robofont 3.0 and beyond open, but give me this error when I try to open a new or previous UFO:

    **A problem occurred when trying to open this UFO.**
    Traceback (most recent call last):
      File "lib/doodleDocument.pyc", line 276, in makeWindowControllers
      File "lib/doodleFontWindow.pyc", line 66, in __init__
      File "lib/UI/fontOverView/__init__.pyc", line 244, in __init__
      File "lib/UI/fontOverView/smartSetList.pyc", line 1064, in __init__
      File "lib/UI/fontOverView/smartSetList.pyc", line 935, in __init__
    ValueError: NSInvalidArgumentException - Unable to parse the format string "Name CONTAINS……… (then lists a character set)…

    Pre-3.0, RoboFont simply crashes.

    I've tried loading multiple versions in SafeMode without success. I've tried opening UFO's with Single Window mode checked and unchecked.

    Is there anything else I can try to fix the bug?

  • Wow, that fixed it. I have no idea how I managed to unknowingly do that.

  • admin

    Hi Zack

    Somehow you managed to add a Smart Set in which the search query is not valid.

    You can use a script to remove a single item from the Smart Sets list, or completely remove all Smart Sets.

    Run one of these in a Scripting Window:

    1. Remove all Smart Sets

    # be careful: this is not undoable
    from mojo.UI import setDefault
    setDefault("smartSets", [])

    2. Remove a Smart Set item

    from mojo.UI import getDefault
    # get all Smart Sets
    smartSets = getDefault("smartSets", [])
    # print out Smart Set names with index
    for index, smartSet in enumerate(smartSets):
        print(index, smartSet["smartSetName"], smartSet.get("query"))
    # set an index number, and uncomment the lines below
    # indexToRemove = 3
    # del smartSets[indexToRemove]
    # setDefault("smartSets", smartSets)

    good luck!