[FIXED] Überbrücktes natives Modul wird in React Native [macOS] nicht angezeigt

Ausgabe

Ich habe (eigentlich nicht vollständig) ein Modul erstellt , das NSOpenPanel und NSSavePanel überbrückt . Hier ist meine RCTPanel.m:

#import <Foundation/Foundation.h>
#import <AppKit/AppKit.h>
#import "RCTPanel.h"

@implementation RCTPanel

RCT_EXPORT_MODULE();

RCT_EXPORT_METHOD(open)
{
  NSOpenPanel *panel;
  
  if ([panel runModal] == NSModalResponseOK)
  {
    // TODO
  }
}

RCT_EXPORT_METHOD(save)
{
  NSSavePanel *panel;

  if ([panel runModal] == NSModalResponseOK)
  {
    //TODO
  }
}

und hier ist mein Testcode App.tsx:

import React from 'react';
import { Button, NativeModules, View } from "react-native";

export default class App extends React.Component {
    render() {
        return (
            <View>
                <Button title='OPEN' onPress={ () => NativeModules.Panel.open() }/>
                <Button title='SAVE' onPress={ () => NativeModules.Panel.save() }/>
            </View>
        );
    }
}

Wenn ich starte npx react-native run-macos, wird die App gut angezeigt, aber wenn ich Tasten drücke, die ich erstellt habe, wird das Öffnen/Speichern-Bedienfeld nicht angezeigt. keine Fehlermeldung.

Ich dachte zuerst , Microsoft zu fragen (das React-Native-Macos pflegt),

aber es scheint kein Fehler zu sein.
eher mein Fehler. deswegen frage ich hier.

Lösung

NSOpenPanel *panel;
  
if ([panel runModal] == NSModalResponseOK)
{
    // TODO
}

Beachten Sie, dass Ihre erste Zeile nur eine panelVariable bezeichnet und nicht das Panel selbst erstellt. Beim manuellen Referenzzählen wäre es ein Junk-Zeiger (nicht initialisiert), kann sich aber nilin ARC befinden. In jedem Fall wird das Senden der -runModalNachricht an nileinfach ignoriert und es passiert nichts, was das von Ihnen beschriebene Verhalten ist.

Ändern Sie die Zeilen in NSOpenPanel *panel = [NSOpenPanel openPanel];und NSSavePanel *panel = [NSSavePanel savePanel];und sie sollten ordnungsgemäß funktionieren.

Wenn in Objective-C die Dinge nicht so laufen, wie sie sollten, ist es immer eine gute Idee, zu überprüfen, ob ein Wert, von dem Sie glauben, dass er existiert, tatsächlich nicht nil.


Beantwortet von –
NSGod


Antwort geprüft von –
David Marino (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like