我有这个问题,我查看了很多主题,但没有找到答案,我正在使用Swift。
我正在向url发送一个异步请求,它返回给我一个xml代码,我像往常一样解析并在NSMutableArray
中的Custom对象中安排它的内容。
假设该数组包含类AppsObject
的3个对象,其中包含ID,图像的URL字符串,Text和URLtring以便稍后用UIButton
通过浏览器转到指定的url页面
我创建了一个名为AppsView
的类,它有一个裸露的初始化器和另一个自定义视图位置和大小的初始化器,并为上面提到的链接添加了一个ImageIcon和一个按钮。
在主视图控制器中,我在for循环中启动appview,以创建包含NSmutableArray数据的多个appview。
由于UIButton已动态生成并将(addTarget)设置为同一对象中的函数,因此收到错误消息。
有人能帮助我吗? 您将找到以下代码:
class AppView: NSObject {
var BackView = UIView()
var AppIconView = UIImageView()
var DescriptionLabel = UILabel()
var LinkIcon = UIImageView()
var AppNo:Int!
var DescriptionText:String!
let originView:UIView!
let LinkImage = UIImage(named: "HyperLink.png")
var LinkButton = UIButton.buttonWithType(UIButtonType.System) as UIButton
let BackViewHeight:CGFloat = 130.0
let AppIconSize:CGFloat = 110.0
let Inset:CGFloat = 5.0
let BackgroundAlpha:CGFloat = 0.5
let LinkButtonSize:CGFloat = 35.0
let LinkButtonURL = NSURL()
override init() {
super.init ()
}
init(sourceView:UIView, AppIconURLString: String , LoadedDescription: String , ObjectNo: Int , LinkButtonURL: NSURL){
super.init()
originView = sourceView
ImagesLoader.downloadImage(NSURL(string: AppIconURLString)!, handler: {image, error in
self.AppIconView.image = image
})
DescriptionText = LoadedDescription
AppNo = ObjectNo
setupAppView()
}
func setupAppView() {
//SetupBackView
BackView.frame = CGRectMake(Inset,
Inset + (CGFloat(AppNo) * 140.0),
originView.bounds.size.width - (Inset * 2),
BackViewHeight)
BackView.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(BackgroundAlpha)
BackView.clipsToBounds = false
originView.addSubview(BackView)
//SetupAppIconView
AppIconView.frame = CGRectMake(BackView.bounds.size.width - AppIconSize - Inset*2, Inset*2, AppIconSize, AppIconSize)
AppIconView.clipsToBounds = false
BackView.addSubview(AppIconView)
//SetupLabelView
DescriptionLabel.frame = CGRectMake(Inset, Inset, BackView.bounds.size.width - Inset - AppIconSize - Inset, AppIconSize)
DescriptionLabel.text = DescriptionText
DescriptionLabel.textColor = UIColor.whiteColor()
BackView.addSubview(DescriptionLabel)
//SetupButtonView
LinkButton.frame = CGRectMake(Inset, BackView.bounds.size.height - LinkButtonSize - Inset, LinkButtonSize, LinkButtonSize)
LinkButton.setImage(LinkImage, forState: .Normal)
LinkButton.addTarget(self, action: "GotoLinkURL:", forControlEvents:UIControlEvents.TouchUpInside)
LinkButton.tag = AppNo
BackView.addSubview(LinkButton)
}
func GotoLinkURL(sender:UIButton!) {
println(sender.tag)
}
}
答案 0 :(得分:0)
我发现我的问题在哪里。我阅读了一些 Apple内存管理,并阅读了有关 NSZombie 的内容,这让我知道NSObject
由于多种原因而从内存中删除了,它是:
1)我没有在调用类的开头MainViewController
声明它,因此当它完成所有启动过程时,它会关闭并从内存中删除,因此GotoLinkURL
功能不存在。
2)然后我在MainViewController
中声明但是我发现最后一个对象只存在于内存中,因为我在for循环语句中调用它所以我在一个NSObjects
中保存了一个数组,这就行了。