- 請注意,我正在為 macOS 使用 React Native
我制作了(實際上,不完整)一個連接NSOpenPanel和NSSavePanel的模塊。這是我的: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
}
}
這是我的測驗代碼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>
);
}
}
當我運行npx react-native run-macos時,應用程式顯示正常,但是當我按下我制作的按鈕時,打開/保存面板不顯示。沒有錯誤資訊。
我首先想到的是向微軟詢問(它維護 react-native-macos),
但這似乎不是一個錯誤。更多的是我的錯誤。所以我在這里問。
uj5u.com熱心網友回復:
NSOpenPanel *panel;
if ([panel runModal] == NSModalResponseOK)
{
// TODO
}
請注意,您的第一行僅指定一個panel變數,它實際上并沒有創建面板本身。在手動參考計數中,它將是一個垃圾(未初始化)指標,但可能nil在 ARC 中。在任何情況下,發送-runModal訊息nil都會被簡單地忽略并且沒有任何反應,這就是您描述的行為。
將線條更改為NSOpenPanel *panel = [NSOpenPanel openPanel];and NSSavePanel *panel = [NSSavePanel savePanel];,它們應該可以正常作業。
在 Objective-C 中,如果事情沒有按應有的方式發生,最好檢查一下您認為存在的某個值是否實際上不是nil.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/513010.html
