有人可以解释何时何时不对Swift中的委托指针使用"弱"赋值,为什么?
我的理解是,如果你使用一个未定义为类的协议,你不能也不想将你的委托指针指向weak.
protocol MyStructProtocol{
//whatever
}
struct MyStruct {
var delegate: MyStructProtocol?
}
Run Code Online (Sandbox Code Playgroud)
但是,当您的协议被定义为类类型协议时,您是否要将您的委托设置为弱指针?
protocol MyClassProtocol:Class{
//whatever
}
class MyClass {
weak var delegate: MyClassProtocol?
}
Run Code Online (Sandbox Code Playgroud)
我对么?在Apple的快速指南中,类协议示例并未使用弱分配,但在我的测试中,如果我的代表没有被弱引用,我会看到强大的引用周期.
delegates memory-leaks memory-management swift strong-reference-cycle
我试图在swift中声明一个实例属性,以便它只对它的类和子类可见.我相信这会被称为其他语言的受保护财产.有没有办法在Swift中实现这一目标?
我认为这张图片解释了一切.我有一个UIView的子类,我已经进入了类字段.我正在尝试在故事板和类实现之间连接ibOutlets.这不是给我一个错误,但它也不起作用.这是另一个xcode错误,还是我希望它以不会的方式工作?

在界面构建器中,它只允许我将子视图约束到底部布局指南,而不是超级视图.因为我有时在容器控制器设置中使用控制器作为子控制器,所以我真的想要限制到superview底部,而不是底部布局指南.

我有redux的反应导航设置.我的应用程序包含一个带有登录和内容屏幕的父TabBarNavigator.内容屏幕本身就是一个包含应用程序主导航的Stack Navigator.redux和navigators的所有其他方面都按预期工作,但StackNavigator上的默认后退按钮也会触发它的父TabBarNavigator返回.
这是预期的行为吗?我注意到,如果我在navigationOptions中定义headerLeft,它会按预期工作:
static navigationOptions = ({ navigation }) => {
return {
headerLeft: (
<Button transparent onPress={() => { navigation.goBack(); }}><Text>Back</Text></Button>
)
};
};
Run Code Online (Sandbox Code Playgroud)
Cam有谁解释是什么原因造成的?有没有办法让默认的stackNavigator后退按钮与redux一起使用?
我已经挖掘了许多帖子试图使用cocoapods为本地ios库设置一个本机项目,但我不可避免地#import <React/RCTBundleURLProvider.h>在我的AppDelegate.m文件中的语句中丢失了一个错误的文件.
什么是使用反应原生的可可豆荚的正确方法?在这篇文章发表时,我目前的RN版本是0.43.4,而我正在使用Xcode 8.2.1.
这是我的过程,好奇我可能会出错:
1)在终端中,我使用创建一个新项目 react-native init TestProject
2)我pod init在该项目的ios目录中运行
3)我在podFile中添加了一个依赖项并运行 pod install
4)安装过程成功,但我看到一个警告我的目标override the 'OTHER_LDFLAGS'并且它建议我$(inherit)在Xcode中的链接器标志中使用.
5)因此,基于此SO帖子,我添加$(inherited)到Project> TestProject> BuildSettings> links> Other Linker Flags,否则为空.我还检查并发现它$(inherited)已经存在于目标>测试项目>构建设置>链接>其他链接器标志和预处理器宏中.
6)此时我在语句中看到React/RCTBundleURLProvider.h文件未找到错误#import <React/RCTBundleURLProvider.h>AppDelegate.m
7)基于此SO帖子,我尝试删除node modules目录并返回终端运行npm install并完成'react-native upgrade'.当它问我是否要替换AppDelegate.m和project.pbxproj文件,我说是的.
8)回到xCode我清理我的构建但仍然有步骤6导入的错误 <React/RCTBundleURLProvider.h>
我只是想创造一个完美的圆形图像.这是我的快速代码:
myImage.layer.cornerRadius = myImage.frame.size.width/2
myImage.layer.masksToBounds = true
Run Code Online (Sandbox Code Playgroud)
这适用于4s,但在5s上不是很圆,并且在iphone 6上显示为圆角矩形.
我假设这与frame.size.width有关,以像素为单位返回值而不是像这样的东西,但我一直无法解决这个问题.
我有NSURLSession正在下载多个文件.我正在为ios 8更新ios 7应用程序.它在ios 7中工作正常,但是当符合ios 8时代表meathod
URLSessionDidFinishEventsForBackgroundURLSession:
Run Code Online (Sandbox Code Playgroud)
永远不会被称为.
我挖得更深一些
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location
Run Code Online (Sandbox Code Playgroud)
和
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
Run Code Online (Sandbox Code Playgroud)
委托meathods我正在检查剩余下载任务的会话:
[self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks){ ...}
Run Code Online (Sandbox Code Playgroud)
在最后一个委托meathod上,在downloadTasks数组中总会有一个元素重新出现.奇怪的是,此下载任务并不总是引用同一文件,并且该任务的状态显示下载已完成.
再次,在ios7中工作正常.仅在ios 8中出现问题.
我正在使用CIPerspectiveCorrection Filter,我的问题是我返回的图像结果是镜像的,颠倒的,用于透视校正的点似乎是引用了错误的轴或轴方向.
为了隔离这个问题,我一直在使用1024 x 1024的测试图像,并且我正在通过一个完美的矩形区域.我仍然在垂直和水平翻转图像.
这是我的函数,它给出一个图像和一组点返回一个裁剪的CIImage实例:
private func _getCroppedImageWithImage(image:CIImage, topLeft:CGPoint, topRight:CGPoint, botLeft:CGPoint, botRight:CGPoint) -> CIImage {
var rectCoords = NSMutableDictionary(capacity: 4)
rectCoords["inputTopLeft"] = CIVector(CGPoint:topLeft)
rectCoords["inputTopRight"] = CIVector(CGPoint:topRight)
rectCoords["inputBottomLeft"] = CIVector(CGPoint:botLeft)
rectCoords["inputBottomRight"] = CIVector(CGPoint:botRight)
return image.imageByApplyingFilter("CIPerspectiveCorrection", withInputParameters: rectCoords)
}
Run Code Online (Sandbox Code Playgroud)
这是我调用此函数的地方:
func testCrop() {
let ciInputImage = CIImage(image:UIImage(named:"test-pattern.jpg")!)
println("source image is \(ciInputImage)") //<CIImage: 0x170212290 extent [0 0 1024 1024]>
let ptBotLeft = CGPointMake(32.0,992.0)
let ptBotRight = CGPointMake(992.0,992.0)
let ptTopRight = CGPointMake(992.0,32.0)
let ptTopLeft = CGPointMake(32.0,32.0)
let croppedImage = _getCroppedImageWithImage(ciInputImage, topLeft: …Run Code Online (Sandbox Code Playgroud) 我有一个带有属性文本的UILabel,其中包含特定的lineSpacing或lineHeightMultiple.
let titleParagraphStyle = NSMutableParagraphStyle()
//titleParagraphStyle.lineSpacing = lineSpacing
titleParagraphStyle.lineHeightMultiple = 1.5
titleParagraphStyle.alignment = .left
let titleAttributes = [NSForegroundColorAttributeName: color,
NSFontAttributeName: UIFont(name: fontName, size: fontSize)!,
NSParagraphStyleAttributeName : titleParagraphStyle] as [String : Any]
let titleAttrString = NSAttributedString(string:string, attributes: titleAttributes)
var label = BetterUILabel()
label.numberOfLines = 0
label.attributedText = titleAttrString
label.setNeedsLayout() //I'm trying everything
label.layoutIfNeeded()
label.sizeToFit()
Run Code Online (Sandbox Code Playgroud)
BetterUILabel是UILabel的子类,修复了perferredMaxLayoutWidth
class BetterUILabel: UILabel {
override public func layoutSubviews(){
super.layoutSubviews()
self.preferredMaxLayoutWidth = self.bounds.width
super.layoutSubviews()
}
override public var bounds: CGRect
{
didSet
{
self.preferredMaxLayoutWidth = self.bounds.width
} …Run Code Online (Sandbox Code Playgroud) ios ×5
swift ×3
autolayout ×2
react-native ×2
xcode ×2
cifilter ×1
cocoapods ×1
core-image ×1
cornerradius ×1
delegates ×1
frame ×1
iboutlet ×1
ios8 ×1
iphone-6 ×1
memory-leaks ×1
nsurlsession ×1
redux ×1
storyboard ×1
uilabel ×1
uistackview ×1
uiview ×1