拖放到 iOS 11 Beta 4 中的“UICollectionView”占位符
Drag and Drop into a `UICollectionView` placeholder in iOS 11 Beta 4
用于拖放到 UICollectionView
中的 API 在 iOS 11 Beta 4 中发生了变化。在 beta 1-3 中,代码如下所示:
let placeholderContext = coordinator.drop(
item.dragItem,
toPlaceholderInsertedAt: indexPath,
withReuseIdentifier: "reuseID",
cellUpdateHandler: { _ in }
)
在 beta 4 中,引入了 UICollectionViewDropPlaceholder
。我的代码是
let placeholder = UICollectionViewDropPlaceholder(
insertionIndexPath: indexPath,
reuseIdentifier: "reuseID"
)
let placeholderContext = coordinator.drop(item.dragItem, to: placeholder)
我遇到这个编译错误:
Undefined symbols for architecture arm64:
"_OBJC_CLASS_$_UICollectionViewDropPlaceholder", referenced from:
objc-class-ref in StickerLibraryViewController.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
note: symbol(s) not found for architecture arm64
error: linker command failed with exit code 1 (use -v to see invocation)
除了在 beta 5 之前不使用占位符之外,有人知道如何在 beta 4 中使用占位符吗?
谢谢!
当模拟器架构处于测试阶段时,我遇到了一个类似的问题,即本地身份验证无法在模拟器架构上编译。
如果您从构建设置中的有效体系结构中删除 arm64(或关闭“构建所有体系结构”),它会编译吗?
如果他们为模拟器编译了这个符号,但没有为 arm64 编译它,唯一的解决办法可能是阻止它在 arm64 上编译并暂时只在模拟器上测试它。
您还可以将代码临时包装在“#if 块”中,以防止编译器在构建 arm64 时查看它。
最后,如果您正在为 iOS 11 下的任何 iOS 版本构建,请务必暂时关闭它们,以防他们忘记标记 API可用性(这可能会让编译器提供更有帮助的消息)。
在 Beta 5 中修复此问题之前,我最终通过进入 Objective-C 运行时解决了这个问题。
在 Obj-C header…
NS_ASSUME_NONNULL_BEGIN
@interface RKNFactory : NSObject
- (UICollectionViewDropPlaceholder*)placeholderForIndexPath:(NSIndexPath*)indexPath resuseIdentifier:(NSString*)reuseIdentifier;
@end
NS_ASSUME_NONNULL_END
实施中……
@import ObjectiveC.runtime;
@implementation RKNFactory
- (UICollectionViewDropPlaceholder*)placeholderForIndexPath:(NSIndexPath*)indexPath resuseIdentifier:(NSString*)reuseIdentifier {
SEL initSelector = NSSelectorFromString(@"initWithInsertionIndexPath:reuseIdentifier:");
Class placeholderClass = NSClassFromString(@"UICollectionViewDropPlaceholder");
return [[placeholderClass alloc] performSelector:initSelector withObject:indexPath withObject:reuseIdentifier];
}
@end
然后从 Swift 代码…
return RKNFactory().placeholder(for: indexPath, resuseIdentifier: reuseIdentifier)
用于拖放到 UICollectionView
中的 API 在 iOS 11 Beta 4 中发生了变化。在 beta 1-3 中,代码如下所示:
let placeholderContext = coordinator.drop(
item.dragItem,
toPlaceholderInsertedAt: indexPath,
withReuseIdentifier: "reuseID",
cellUpdateHandler: { _ in }
)
在 beta 4 中,引入了 UICollectionViewDropPlaceholder
。我的代码是
let placeholder = UICollectionViewDropPlaceholder(
insertionIndexPath: indexPath,
reuseIdentifier: "reuseID"
)
let placeholderContext = coordinator.drop(item.dragItem, to: placeholder)
我遇到这个编译错误:
Undefined symbols for architecture arm64:
"_OBJC_CLASS_$_UICollectionViewDropPlaceholder", referenced from:
objc-class-ref in StickerLibraryViewController.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
note: symbol(s) not found for architecture arm64
error: linker command failed with exit code 1 (use -v to see invocation)
除了在 beta 5 之前不使用占位符之外,有人知道如何在 beta 4 中使用占位符吗?
谢谢!
当模拟器架构处于测试阶段时,我遇到了一个类似的问题,即本地身份验证无法在模拟器架构上编译。
如果您从构建设置中的有效体系结构中删除 arm64(或关闭“构建所有体系结构”),它会编译吗?
如果他们为模拟器编译了这个符号,但没有为 arm64 编译它,唯一的解决办法可能是阻止它在 arm64 上编译并暂时只在模拟器上测试它。
您还可以将代码临时包装在“#if 块”中,以防止编译器在构建 arm64 时查看它。
最后,如果您正在为 iOS 11 下的任何 iOS 版本构建,请务必暂时关闭它们,以防他们忘记标记 API可用性(这可能会让编译器提供更有帮助的消息)。
在 Beta 5 中修复此问题之前,我最终通过进入 Objective-C 运行时解决了这个问题。
在 Obj-C header…
NS_ASSUME_NONNULL_BEGIN
@interface RKNFactory : NSObject
- (UICollectionViewDropPlaceholder*)placeholderForIndexPath:(NSIndexPath*)indexPath resuseIdentifier:(NSString*)reuseIdentifier;
@end
NS_ASSUME_NONNULL_END
实施中……
@import ObjectiveC.runtime;
@implementation RKNFactory
- (UICollectionViewDropPlaceholder*)placeholderForIndexPath:(NSIndexPath*)indexPath resuseIdentifier:(NSString*)reuseIdentifier {
SEL initSelector = NSSelectorFromString(@"initWithInsertionIndexPath:reuseIdentifier:");
Class placeholderClass = NSClassFromString(@"UICollectionViewDropPlaceholder");
return [[placeholderClass alloc] performSelector:initSelector withObject:indexPath withObject:reuseIdentifier];
}
@end
然后从 Swift 代码…
return RKNFactory().placeholder(for: indexPath, resuseIdentifier: reuseIdentifier)