typescript - Jeg implementerte iOS-delegatmetoden, den fungerte i den innledende fasen


Opprinnelig skript versjon 5.1.1

Xcode 10 og nyere, Mojave OS

SearchBar Onloaded-funksjon

//Delegate Method Call
let delegate = MallSearchDelegate.initWithOriginalDelegate((<any>this.searchbar)._delegate);
(<any>this.searchbar)._delegate = delegate;

Delegert klasse

export class MallSearchDelegate extends NSObject{
public static ObjCProtocols = [UISearchBarDelegate];
private _originalDelegate:UISearchBarDelegate;

public static initWithOriginalDelegate(originalDelegate: UISearchBarDelegate):MallSearchDelegate{
    let delegate = <MallSearchDelegate>MallSearchDelegate.new();
    delegate._originalDelegate = originalDelegate;
    console.log("Initialized SearchBar");
    return delegate;
}

public searchBarTextDidEndEditing(searchBar: UISearchBar):void{ 
    console.log("endSearch");
    if(((<any>this._originalDelegate)._owner)!=undefined){
        const owner = (<WeakRef<SearchBar>>(<any>this._originalDelegate)._owner).get();
        if (owner) {
            owner.notify({
                object: owner,
                eventName: "endSearch",
                focusable:false
            });
        }
    } 
}

public searchBarTextDidBeginEditing(searchBar: UISearchBar):void{ 
    console.log("beginSearch");
    if(((<any>this._originalDelegate)._owner)!=undefined){
        const owner = (<WeakRef<SearchBar>>(<any>this._originalDelegate)._owner).get();
        if (owner) {
            owner.notify({
                object: owner,
                eventName: "beginSearch",
                focusable:true
            });
        }
    }
}

public searchBarSearchButtonClicked(searchBar: UISearchBar) {
    console.log("onSubmit");
    searchBar.resignFirstResponder();
    if(((<any>this._originalDelegate)._owner)!=undefined){
    const owner = (<WeakRef<SearchBar>>(<any>this._originalDelegate)._owner).get();
        if (owner) {
            owner.notify({ 
                object: owner,
                eventName: "submit"
            });
        }
    }
}

Naviger til en annen side og tilbake til siden når brukeren klikker på søkefeltet, krasjer appen.

Årsak: Kom tilbake til delegeringsmetodesiden og klikk på søkefeltet, det returnerer feilen 'eier er udefinert', derfor la jeg til en betinget sjekk for udefinert.