我有一个 iOS 应用程序,它试图从外部存储设备读取文件而不将它们导入应用程序的沙箱。
我已按照此处概述的 Apple 文档来执行此操作-
我能够检索选定的目录(位于通过 Lightning 端口连接的外部存储设备上)并枚举目录中的文件。
但是,当我尝试按照推荐的模式对这些文件执行某些操作时,我遇到了失败,并且基本上会出现该文件的权限错误。
let shouldStopAccessing = pickedFolderURL.startAccessingSecurityScopedResource()
defer {
if shouldStopAccessing {
pickedFolderURL.stopAccessingSecurityScopedResource()
}
}
var coordinatedError:NSError?
NSFileCoordinator().coordinate(readingItemAt: pickedFolderURL, error: &coordinatedError) { (folderURL) in
let keys : [URLResourceKey] = [.isDirectoryKey]
let fileList = FileManager.default.enumerator(at: pickedFolderURL, includingPropertiesForKeys: keys)!
for case let file as URL in fileList {
if !file.hasDirectoryPath {
do {
// Start accessing a security-scoped resource.
guard file.startAccessingSecurityScopedResource() else {
// Handle the failure here.
//THIS ALWAYS FAILS!!
return
}
// …Run Code Online (Sandbox Code Playgroud) ios nsfilecoordinator swift uidocumentpickerviewcontroller ios13
我想我错过了一些基本的东西.对先前提出的问题的任何解释或指示将非常有帮助.
import java.util.Arrays;
import java.util.List;
public class St {
public static void bla(Object[] gaga) {
gaga[0] = new Date(); // throws ArrayStoreException
System.out.println(gaga[0]);
}
public static void bla(List<Object> gaga) {
System.out.println(gaga.get(0));
}
public static void main(String[] args) {
String[] nana = { "bla" };
bla(nana); // Works fine
List<String> bla1 = Arrays.asList(args);
bla(bla1); // Wont compile
System.out.println(new String[0] instanceof Object[]); // prints true
System.out.println(nana.getClass().getSuperclass().getSimpleName()); // prints Object
}
}
Run Code Online (Sandbox Code Playgroud)
所以,似乎a List<String>不是a的子类,List<Object>而a String[]是a的子类Object[].
这是一个有效的假设吗?如果是这样,为什么?如果没有,为什么?
谢谢
我有一个带有telesize()方法的伸缩构造函数的超类.为了防止子类忘记调用super.finalize,我已经编写了一个终结器监护器(EJ Item 7).
public class Super {
public Super() {}
{
Object finalizerGuardian = new Object() {
@Override
protected void finalize() {
System.out.println("Finalizer guardian finalize");
Super.this.finalize();
}
};
}
protected void finalize() {
System.out.println("Super finalize");
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个示例子类 -
public class Sub extends Super {
public Sub() {}
protected void finalize() {
System.out.println("Sub finalize");
}
public static void main(String[] args)
throws InterruptedException {
if (1 == 1) {
Sub s1 = new Sub();
}
Runtime.getRuntime().gc();
Thread.sleep(10000);
}
}
Run Code Online (Sandbox Code Playgroud)
当s1对象超出范围时,终结器监护人的finalize()被调用,我从子类的finalize方法中获取SYSO,但从未从super的finalize中获取.
我糊涂了.我是否从根本上误解了一些事情? …
我想让我的UIToolBar有一个透明的背景(类似于iBooks),但我没有设置translucent属性的运气.
这是我的代码:
UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
NSMutableArray *toolBarItems = [[NSMutableArray alloc] init];
[toolBarItems addObject:[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:nil action:nil]];
[toolBarItems addObject:[[UIBarButtonItem alloc] initWithTitle:@"Source" style:UIBarButtonItemStyleBordered target:nil action:nil]];
[toolBarItems addObject:[[UIBarButtonItem alloc] initWithTitle:@"Aa" style:UIBarButtonItemStyleBordered target:nil action:nil]];
[toolBarItems addObject:[[UIBarButtonItem alloc] initWithTitle:@"Rabbit" style:UIBarButtonItemStyleBordered target:nil action:nil]];
toolBar.items = toolBarItems;
toolBar.translucent = YES;
[self.view addSubview:toolBar];
Run Code Online (Sandbox Code Playgroud)
它仍然是这样的:

ios ×2
java ×2
arrays ×1
collections ×1
finalize ×1
ios13 ×1
objective-c ×1
swift ×1
uidocumentpickerviewcontroller ×1
uitoolbar ×1
uiview ×1