Editor script don't apply changes in Prefab mode

Basically I have this script, which is used to create and show a list of images contained in an Atlas, I choose the name of the image and this is used by the AVImage component (which it inherits from Image), in a normal scene everything works and the choice is saved, while if they are in Prefab Mode (i.e. I’m editing a prefab) the changes aren’t applied

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using UnityEngine.U2D;
using UnityEngine.UI;
 
namespace TCG.UI
{
    [CustomEditor(typeof(AVImage))]
    public class AVImageEditor : Editor
    {
        public string[] spriteNames;
        int previousSpriteIndex = -1;
        int spriteIndex = 0;
        AVImage avImage;
 
        public override void OnInspectorGUI()
        {
            serializedObject.Update();
            base.OnInspectorGUI();
 
            avImage = (AVImage)target;
 
            if (avImage.atlas == null) { return; }
 
            if (spriteNames == null)
            {
                Sprite[] tmpSprites = new Sprite[avImage.atlas.spriteCount];
                spriteNames = new string[avImage.atlas.spriteCount];
                avImage.atlas.GetSprites(tmpSprites);
                int i = 0;
                foreach (Sprite sprite in tmpSprites)
                {
                    spriteNames *= sprite.name.Replace("(Clone)", "");*

i++;
}
}

if (avImage.sprite == null)
{
previousSpriteIndex = -1;
spriteIndex = 0;
SelectSprite(spriteNames[spriteIndex]);
}
else
{
string selectedSpriteName = avImage.sprite.name;
int i = 0;
foreach (string spriteName in spriteNames)
{
if (spriteName == selectedSpriteName.Replace(“(Clone)”, “”))
{
spriteIndex = i;
break;
}
i++;
}
}
//working but unoptimized
//previousSpriteIndex = spriteIndex;
spriteIndex = EditorGUILayout.Popup(“Sprite name”, spriteIndex, spriteNames);
SelectSprite(spriteNames[spriteIndex]);

//optimized version
//Debug.LogFormat(“{0} to: {1}”, previousSpriteIndex, spriteIndex);
//if (previousSpriteIndex != spriteIndex)
//{
// SelectSprite(spriteNames[spriteIndex]);
//}

serializedObject.ApplyModifiedProperties();
}

///


/// Sprite selection callback function.
///

void SelectSprite(string spriteName)
{
SerializedProperty atlasProperty = serializedObject.FindProperty(“atlas”);
SpriteAtlas atlas = atlasProperty.objectReferenceValue as SpriteAtlas;
SerializedProperty spriteProperty = serializedObject.FindProperty(“m_Sprite”);
spriteProperty.objectReferenceValue = atlas.GetSprite(spriteName);
}
}
}
____________________________________________________________________________________________________
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.U2D;
using UnityEngine.UI;

namespace TCG.UI
{
public class AVImage : Image
{
public SpriteAtlas atlas;
}
}

Ok here is what you need to understand @marrechgames . While in Prefab mode Unity uses PrefabUtility to directly save changes to the prefab but in Scene Editor it is serialized to the scene. So a custom editor can save changes in the scene but while in the prefab editor( Isolated prefab scene) it doesn’t.

So for that u need to directly save the prefab to disk using

PrefabUtility.

So here to check whether u are in prefab mode or Scene mode you need to import a experimental header :-

using
UnityEditor.Experimental.SceneManagement;

****Make sure You Save the Prefab manually or Autosave is turned on.**

So a sample code for you ( Do some searches and you will get a idea … ( Take the following code as a reference and change it according to your needs.

 if (PrefabStageUtility.GetCurrentPrefabStage() != null) // In Prefab Mode
 {
   string path = PrefabStageUtility.GetPrefabStage(Selection.activeObject as 
        GameObject).prefabAssetPath; // Get the prefab path in disk
      GameObject prefabRoot = PrefabUtility.LoadPrefabContents(path); // Load the contents of the prefab.
     SerializedObject avImageSO = new SerializedObject(prefabRoot.GetComponent<AVimage>());
 avImageSO.Update();
// Do your stuff here.

avImageSO.ApplyModifiedProperties() ;// Apply after editing so that the values are stored

   try
                    {
                        PrefabUtility.SaveAsPrefabAsset(prefabRoot, path); // Save the prefab to disk     
                    }
                    finally
                    {
                        PrefabUtility.UnloadPrefabContents(prefabRoot);     // Unload to clear memory..               
                    }
}

Nobody could help me?