When you are manipulating the data like:
this.data.profiles[i].icon.url = '';
Then you should use in order to detect changes:
let array = this.data.profiles.map(x => Object.assign({}, x)); // It will detect changes
Since angular ngOnchanges not be able to detect changes in array, objects then we have to assign a new reference. Works everytime!