pyr last edited by m_adam
If you delete a field object in the object manager, GetCount() does not change. Worse if you repeat the whole thing, the value even increases.
The issue also apply to HasContent()
workaround / seems to work in my usecase
def CheckFieldHealth (self,doc,field): if field == None: return False def get_field_layers(field): """ Returns all field layers that are referenced in a field list. https://plugincafe.maxon.net/topic/11809/iterating-trough-field-list/2 """ def flatten_tree(node): """ Listifies a GeListNode tree. """ res =  while node: res.append(node) for child in node.GetChildren(): res += flatten_tree(child) node = node.GetNext() return res # get the GeListHead for the FieldList root = field.GetLayersRoot() if root is None: return  # Get the first node under the GeListHead first = root.GetFirst() if first is None: return  # traverse the graph return flatten_tree(first) error = 0 for f in get_field_layers(field): if f.GetName() != None and f.GetLinkedObject(doc) == None and f[c4d.DESC_NAME]== None: error += 1 if error == field.GetCount(): return False return True
m_adam last edited by
Hi @pyr, I've just reached the development team about it.
So for them, this is not a bug since FieldList store only baseLink.
In Python, we don't have BaseLink, but if you are not aware of what it is, please read BaseLink Manual.
But since there is no BaseLink in Python, if a link points to a destructed object (like in your case, Python simply returns None)
So I guess your workaround is ok.