我的主要问题是我正在尝试解决(未记录的)事实,即@Published在订阅者收到更改通知后,属性不会更新属性的值。我似乎无法找到解决它的好方法。
考虑以下 aSubject和@Published属性的人为组合。首先是一个简单的类:
class StringPager {
@Published var page = 1
@Published var string = ""
}
let pager = StringPager()
Run Code Online (Sandbox Code Playgroud)
然后是一个简单的传递主题:
let stringSubject = PassthroughSubject<String, Never>()
Run Code Online (Sandbox Code Playgroud)
为了调试,让我们订阅字符串属性并打印出来:
pager.$string.sink { print($0) }
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好。接下来,让我们订阅主题并根据其值更改寻呼机:
stringSubject.sink { string in
if pager.page == 1 {
pager.string = string
} else {
pager.string = string.uppercased()
}
}
Run Code Online (Sandbox Code Playgroud)
希望这个逻辑可以让我们在不在第一页时将寻呼机字符串设为大写。
现在让我们在页面更新时通过 stringSubject 发送值:
pager.$page.sink {
$0 == 1 ? stringSubject.send("lowercase") : stringSubject.send("uppercase")
}
Run Code Online (Sandbox Code Playgroud)
如果我们正确地理解了这个逻辑,那么小写将始终为小写,而大写将始终为大写。不幸的是,事实并非如此。这是一个示例输出:
pager.page = 1 // lowercase
pager.page …Run Code Online (Sandbox Code Playgroud) 所以我一直在干预将一个小型 SwiftUI iPad 应用程序“移动”到 Mac,并且我在使用UIDocumentPickerViewController. 我已经包裹UIDocumentPickerViewController在一个UIViewControllerRepresentable像这样:
struct DocumentPickerView: UIViewControllerRepresentable {
func makeUIViewController(context: Context) -> UIDocumentPickerViewController {
let documentPicker = UIDocumentPickerViewController(documentTypes: [(kUTTypeImage as String)], in: .import)
return documentPicker
}
func updateUIViewController(_ uiViewController: UIDocumentPickerViewController, context: Context) {
}
}
Run Code Online (Sandbox Code Playgroud)
并像这样显示它:
struct ContentView: View {
@State var shows = false
var body: some View {
Button(action: { self.shows.toggle() }) {
Text("Select File")
}
.sheet(isPresented: self.$shows) {
DocumentPickerView()
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是当在 Mac 上时,UIDocumentPickerViewController …
在下面的代码中,我试图弄清楚如何savePhoto使用SwiftUI按钮执行该功能。这实际上是我试图解决的问题的简化版本,但仍然无法弄清楚。我在 中创建的按钮ContentView是我想象中解决问题的方式,但由于 SwiftUI 结构,我似乎无法找到解决方法。
这是我的 SwiftUI 视图:
struct ContentView: View {
var body: some View {
ZStack{
AnotherControllerView()
Button(action: { AnotherControllerView.savePhoto() }){
Text("Save Photo")
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Run Code Online (Sandbox Code Playgroud)
还有我集成的 UIViewController:
import Foundation
import SwiftUI
import UIKit
struct AnotherControllerView : UIViewControllerRepresentable {
typealias UIViewControllerType = AnotherController
func makeCoordinator() -> AnotherControllerView.Coordinator {
Coordinator(self)
}
func makeUIViewController(context: UIViewControllerRepresentableContext<AnotherControllerView>) -> AnotherController {
return AnotherController() …Run Code Online (Sandbox Code Playgroud) 我正在开发简单的待办事项应用程序SwiftUI。在我的测试中,我注意到我的视图模型从不调用 deinit 并导致内存使用量线性增加。
我使用以下代码重现了相同的行为:
struct ContentView: View {
@State private var isPresented = false
var body: some View {
Button("open") {
self.isPresented = true
}
.sheet(isPresented: $isPresented) {
SheetView()
}
}
}
struct SheetView: View {
@ObservedObject var model: ViewModel
init() {
model = ViewModel()
}
var body: some View {
Form {
Toggle("Toggle Me", isOn: $model.isOn)
}
}
}
class ViewModel: ObservableObject {
@Published var isOn = false
deinit {
print("ViewModel deinit ")
}
}
Run Code Online (Sandbox Code Playgroud)
当工作表被解除时,模型对象永远不会取消。如果我用 VStack …
我正在尝试为我的Ionic应用程序获取全屏视频背景,它在 Android 和浏览器上运行良好,但是当我在 Xcode 模拟器中的 iPhone 上运行该应用程序时,它只是一个白色背景,视频无法加载.
html代码:
<div class="fullscreen-bg">
<video autoplay loop muted playsinline webkit-playsinline>
<source src="/assets/videos/background.mp4" type="video/mp4">
</video>
</div>
Run Code Online (Sandbox Code Playgroud)
CSS 代码:
.fullscreen-bg {
top: 0;
right: 0;
bottom: 0;
left: 0;
overflow: hidden;
z-index: -100;
height: 100vh;
}
Run Code Online (Sandbox Code Playgroud)
我还在 config.xml 文件中添加了这个
<preference name="AllowInlineMediaPlayback" value="true"/>
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
我用来CloudKit存储公开可用的数据,并将新数据NSPersistentCloudKitContainer作为我的核心数据堆栈的一部分来存储/同步私有数据。
当用户打开我的应用程序时,他们处于以下 4 种状态之一:
状态 1 和状态 2 代表我的快乐路径。如果他们是新用户,我想在显示初始视图之前向用户的私人存储添加一些数据。如果他们是回头客,我想从核心数据中获取数据以传递到初始视图。
确定新/老用户:
我的计划是使用NSUbiquitousKeyValueStore. 我对此的担忧是处理以下情况:
下载应用程序 -> 被记录为之前启动过该应用程序 -> 删除并在新设备上重新安装/安装该应用程序
我认为NSUbiquitousKeyValueStore需要一些时间才能接收更新,因此我需要等待其完成同步,然后再进入初始视图。那么问题来了,如果他们无法访问 iCloud 会发生什么?NSUbiquitousKeyValueStore如果无法收到更新,如何告诉我他们是否是回访用户?
确定 iCloud 访问:
根据我所做的研究,我可以检查iCloudFileManager.default.ubiquityIdentityToken是否nil可用,但这不会告诉我原因。我必须用它CKContainer.default().accountStatus来了解为什么 iCloud 不可用。问题是这是一个异步调用,我的应用程序在了解他们的帐户状态是什么之前就会继续前进。
我对这个实在是摸不着头脑。优雅地确保所有这些状态都得到处理的最佳方法是什么?
core-data ios nsubiquitouskeyvaluestore cloudkit nspersistentcloudkitcontainer
如何将此代码转换为SwiftUI. 这是雪花效应。我使用了 CAEmitterLayer 但我不知道如何在 SwfitUI 中使用它。SwiftUI 中没有 addSublayer。是否可以在不使用 UIHostingController 的情况下运行此代码?
let size = CGSize(width: 824.0, height: 1112.0)
let host = UIView(frame: CGRect(x: 0.0, y: 0.0, width: size.width, height: size.height))
self.view.addSubview(host)
let particlesLayer = CAEmitterLayer()
particlesLayer.frame = CGRect(x: 0.0, y: 0.0, width: size.width, height: size.height)
host.layer.addSublayer(particlesLayer)
host.layer.masksToBounds = true
particlesLayer.backgroundColor = UIColor(red: 0.0/255.0, green: 0.0/255.0, blue: 0.0/255.0, alpha: 1.0).cgColor
particlesLayer.emitterShape = .circle
particlesLayer.emitterPosition = CGPoint(x: 509.4, y: 707.7)
particlesLayer.emitterSize = CGSize(width: 1648.0, height: 1112.0)
particlesLayer.emitterMode = .surface
particlesLayer.renderMode …Run Code Online (Sandbox Code Playgroud) 当我尝试运行我的项目时出现此错误。
Undefined symbol: ___darwin_check_fd_set_overflow
Run Code Online (Sandbox Code Playgroud)
在这里,我包含了pod 'mobile-ffmpeg-full', '4.3.2'这个用于视频流的框架。
完全错误:
Undefined symbols for architecture arm64:
"___darwin_check_fd_set_overflow", referenced from:
_read_key in mobileffmpeg(libmobileffmpeg_la-fftools_ffmpeg.o)
_xmlNanoFTPCheckResponse in libxml2(nanoftp.o)
_xmlNanoFTPCloseConnection in libxml2(nanoftp.o)
_xmlNanoFTPList in libxml2(nanoftp.o)
_xmlNanoFTPGet in libxml2(nanoftp.o)
_OUTLINED_FUNCTION_8 in libxml2(nanoftp.o)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)
框架 Git 链接: https : //github.com/tanersener/mobile-ffmpeg
我正在尝试创建一个简单的应用程序WebView,其中嵌入了使用的网站,一切正常,除了我不明白如何对需要凭据的网站进行身份验证。我在网上搜索了几个小时,最终放弃寻找答案。可能只是我不知道该用什么措辞。希望这里的任何人都知道一种对凭据进行硬编码的方法,或者最好是一种让用户输入自己的凭据的方法。
谢谢你!
我使用的代码是最简单的,如下所示:
import SwiftUI
import WebKit
struct ContentView: View {
var body: some View {
NavigationView {
VStack {
WebView(request: URLRequest(url: URL(string: "https://siteurl")!))
}.navigationBarTitle("Example Text")
}
}
}
struct WebView: UIViewRepresentable {
let request: URLRequest
func makeUIView(context: Context) -> WKWebView {
return WKWebView()
}
func updateUIView(_ uiView: WKWebView, context: Context) {
uiView.load(request)
}
}
Run Code Online (Sandbox Code Playgroud) 我收到以下警告,应用程序显示黑屏 iOS 13
UIWindowSceneSessionRoleApplication 的[SceneConfiguration]
Info.plist配置“(无名称)”包含 UISceneDelegateClassName 键,但无法加载名为MyApp.SceneDelegate 的类。
我该如何解决这个问题?
我已在我的Nativescript应用程序中添加了一个共享扩展,该扩展需要一个 Pod。
因此,我需要修改 Nativescript 应用程序的 Podfile,以使用所需的 Pod 来定位我的共享扩展,如下所示:
target :MyApp do
platform :ios, '8.0'
use_frameworks!
pod 'AFNetworking', '~> 2.0'
pod '...'
end
target :MyExtension do
use_frameworks!
pod 'AFNetworking', '~> 2.0'
end
post_install do |installer_representation|
installer_representation.pods_project.targets.each do |target|
if target.name.start_with? "Pods-MyExtension"
target.build_configurations.each do |config|
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)', 'AF_APP_EXTENSIONS=1']
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
这里的问题是,每次运行项目时,Podfile 都会被 Nativescript 覆盖。
那么,有一种方法可以“阻止”Podfile 以防止 Nativescript 覆盖它,或者可能有一个“钩子”用于在 Nativescript Podfile 生成后向 Podfile 添加自定义内容?
我该如何继续?
谢谢。
react-native我根据我的要求更改了包 src 组件。我如何将其添加到我的应用程序中?
(即)我添加了react-native-floating-action并更改了文件中的一些FloatingActionItem.js样式FloatingAction.js。如何在我的应用程序中添加更改。
因为如果我删除节点模块,则再次安装后所有更改都会消失。
ios ×12
swiftui ×4
swift ×3
xcode ×3
cloudkit ×1
cocoa-touch ×1
combine ×1
cordova ×1
core-data ×1
css ×1
ffmpeg ×1
html ×1
ios13 ×1
mac-catalyst ×1
macos ×1
memory-leaks ×1
nativescript ×1
nspersistentcloudkitcontainer ×1
objective-c ×1
podfile ×1
react-native ×1
swift5 ×1
wkwebview ×1
xcode11 ×1