Swift 使用按钮获取核心数据中的索引

Swift 使用按钮获取核心数据中的索引,swift,button,core-data,indexing,fetch,Swift,Button,Core Data,Indexing,Fetch,我下面的swift代码想用一个按钮转到索引中的第一张照片。如果用户在TetXT字段中键入0,则我的代码有效。然后图像视图获取保存在索引中的第一项。我想做的是,当用户按下rghtBtn时,它将具有输入0的效果。然后,如果再次按下它,它将获取索引中的第二项。因此,指数是不断增加的。用户正在获取一个名为pic的二进制数据。我有一张二进制数据的照片 导入UIKit 导入CoreData 类ViewController:UIViewController、UIExtFieldDelegate{ 惰性变量

我下面的swift代码想用一个按钮转到索引中的第一张照片。如果用户在TetXT字段中键入0,则我的代码有效。然后图像视图获取保存在索引中的第一项。我想做的是,当用户按下rghtBtn时,它将具有输入0的效果。然后,如果再次按下它,它将获取索引中的第二项。因此,指数是不断增加的。用户正在获取一个名为pic的二进制数据。我有一张二进制数据的照片

导入UIKit
导入CoreData
类ViewController:UIViewController、UIExtFieldDelegate{
惰性变量上下文=(UIApplication.shared.delegate为!AppDelegate)。persistentContainer.viewContext
var itemsName:[NSManagedObject]=[]
func textField(textField:UITextField,shouldChangeCharacters范围:NSRange,replacementString:string)->Bool{
guard let text=(textField.text作为?NSString)?.replacingCharacters(in:range,with:string),let index=Int(text)else{
返回真值
}
loadImage(位于:索引-1)
//currentPageLabel.text=tt.text
让ee=(textField.text作为NSString?).replacingCharacters(在:范围内,使用:字符串)
返回真值
}
func loadImage(索引处:Int){
let fetchRequest=NSFetchRequest(entityName:“用户”)
fetchRequest.predicate=NSPredicate(格式:“idx==%d”,Int32(索引))
做{
如果let user=try context.fetch(fetchRequest).first{
pic.image=UIImage(数据:user.pic!)
}否则{
pic.image=UIImage(命名为:“np.png”)
}
}抓住{
打印(“无法获取\(错误)”)
}
}
var pic=UIImageView()
var tt=UITextField()
var lzbel=UILabel()
var submit=ui按钮()
var leftBtn=UIButton()
var rightbn=UIButton()
覆盖变量prefersStatusBarHidden:Bool{
返回真值
}
重写func viewDidLoad(){
super.viewDidLoad()
让项=用户(上下文:上下文)
让vex=UIImage(名为:“lili.jpg”)!.pngData()
item.pic=vex
item.idx=0
让item2=用户(上下文:上下文)
让vex2=UIImage(名为:“camila.jpg”)!.pngData()
项目2.pic=vex2
项目2.idx=1
打印(“存储数据…”)
做{
尝试context.save()
}抓住{
打印(“存储数据失败”,错误)
}
lzbel.textAlignment=.center
tt.placeholder=“输入页码”
tt.delegate=self
view.backgroundColor=.white
[pic,tt,rightbn].forEach{
view.addSubview($0)
$0.translatesAutoResizengMaskintoConstraints=false
$0.backgroundColor=.green
}
图片背景颜色=.red
rightBtn.setTitle(“>”,用于:。正常)
tt.textAlignment=.center
NSLayoutConstraint.activate([
tt.trailingAnchor.constraint(等式:view.trailingAnchor,常量:0),
tt.topAnchor.constraint(等式:view.topAnchor,常量:0),
tt.heightAnchor.constraint(等式:view.heightAnchor,乘数:0.3,常数:0),
tt.leadingAnchor.constraint(等式:view.leadingAnchor,常数:0),
tt.widthAnchor.constraint(等式:view.widthAnchor,乘数:7/7,常数:0),
图.trailingAnchor.constraint(等式:view.trailingAnchor,常数:0),
图:topAnchor.constraint(等式:tt.bottomAnchor,常数:0),
图.heightAnchor.constraint(等式:view.heightAnchor,乘数:0.33,常数:0),
pic.leadingAnchor.constraint(等式:view.leadingAnchor,常数:0),
rightBtn.trailingAnchor.constraint(等式:view.trailingAnchor,常量:0),
rightBtn.topAnchor.constraint(等式:pic.bottomAnchor,常数:0),
rightBtn.heightAnchor.constraint(等式:view.heightAnchor,乘数:0.33,常数:0),
rightBtn.leadingAnchor.constraint(等式:view.leadingAnchor,常量:0),
])
tt.backgroundColor=.systemGray
submit.backgroundColor=.purple
submit.setTitle(“保存”,用于:。正常)
将appD=UIApplication.shared.delegate设为!AppDelegate
让context=appD.persistentContainer.viewContext
let fetchRequest=NSFetchRequest(entityName:“用户”)
fetchRequest.sortDescriptors=[NSSortDescriptor(键:“idx”,升序:true)]
做{
itemsName=try context.fetch(fetchRequest)
}抓住{
印刷品(“Ashley Tisdale”)
}
lzbel.text=String(itemsName.count)+String(“保存的总页数”)
lzbel.backgroundColor=.red
rightBtn.addTarget(自身,操作:#选择器(rightBtnPress),用于:。着陆)
}
@objc func rightbnpress(){
//打勾此代码应具有以下效果
}
}

您需要一个索引变量

var counter = 0
@objc func rightBtnPress() {
   loadImage(at: counter)
   counter += 1
}
然后在
rightbnpress中
在索引
计数器处加载图像
并增加变量

var counter = 0
@objc func rightBtnPress() {
   loadImage(at: counter)
   counter += 1
}

你的问题是什么?两个问题,你在哪里定义和更新你在
rightbn
中传递给
loadImage
索引?您是如何配置按钮的?是
rghtBtn
甚至被调用。@koen更新了我上面的问题,添加了一个gif。正如你在gif中看到的。当用户点击按钮时,什么也不会发生,但当用户在文本字段中键入1时,图像将被提取并显示在图像视图中。我希望第一次点击按钮的效果与用户在文本字段中键入1的效果完全相同。