iOS 10 开发第一季 ④高级篇

iOS 10 开发第一季的第四篇

默认教学计划
1282人加入学习
(9人评价)
价格 免费
教学计划

杨贵妃不是唐贵妃,哈哈~

[展开全文]

这一小节错误有点多。

[展开全文]

sudo gem install cocoapods

sudo gem install -n /usr/local/bin cocoapods

pod  --version

gem sources -l

 

target 'FansArea' do

   pod  'AVOSCloud'

end

[展开全文]


 

更高效获取数据的方法:

[展开全文]

 

波哥,在你 使用方法概览 这一页有个BUG,你写的是 添加搜索条到Table View关键代码:

let sc = UISearchController(searchResultsController:nil)

sc.searchResultsUpdater = self

tableView.tableHeaderView = sc.searchBar

 

这里不应该用

let sc = UISearchController(searchResultsController:nil)

而是应该直接引用

sc = UISearchController(searchResultsController:nil)

否则会出问题.

[展开全文]

波啊,还是有点隔靴搔痒的感觉啊

[展开全文]

表格的title titleForHeaderInSetction 

[展开全文]

// 删除行的时候

let appDelegate = UIApplication.shared.delegate as1 AppDeletate

let context = appDelegate.persistentContainer.viewContext
context.delete(self.fc.object(at:indexPath))
appDelegate.saveContext()

[展开全文]

加一行更新一行,性能优化

NSFetchResultsControllerDelegate

var areas:[AreaMO] = []
//加上返回类型 <AreaMO>
var fc:NSFetchResultsController<AreaMO>!

 

viedDidLoad()

let requet:NSFetchRequest<AreaMO> = AreaMO.fetchRequest()
let sort = NSSortDescriptor(key:"name",ascending:true)
request.sortDescriptors = [sort]


let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
fc = NSFetchedResultsController(fetchRequest:request,managedObjectContext:context,sectionNameKeyPath:nil)
fc.delegate = self 
do {
try fc.performFetch()
if let obj = fc.fetchedObjects{
 areas = obj
}

}catch {
print (error ?? "unknown errors")

}
}

 

func controllerWillChangeContent(){
  tableView.beginUpdates()
}

func controllerDidChangeContent(){
 tableView.endUpdates()
}
 

 

当数据内容发生变化时

func controller(_ controller:NSFetchResultsController<NSFetchRequestsResult>,didChange anObject:Any,at indexPath:IndexPath?,for type:NSFetchedReslutsChangeType,newIndexpath:indexPath?){

switch type {

case .delete:

tableView.deleteRows(at:[indexPath!],with:.automatic)

case .insert:

// 注意是[newIndexPath!]

tableView.insertRows(at:[newIndexPath!],with:.automatic)

case .update

tableView.reloadRows[at:[indexPath!].with:.automatic]

default:

tableView.reloadData()

}

// 更新数据源 

if let obj = controller.fetchObjects{

  areas = obj as! [AreaMO]

}
}

// 注意得删除和更新数据,不然会出错 

 

 

[展开全文]

先保存到本地缓存,然后立即保存到云端!

LeanCloud / UIImageJPEGRepresentation 压缩图片

func saveToCloud(area:AreaMo!){

let cloudObj = AVObject(className:"Area")
cloudObj["name"] = area.name!
cloudObj["isVisited"] = area.isVisited
// 把缓存中的数据取出
let originImg = UIImage(data:area.image as! Data)!
//图片缩放
let scalingFactor = (originImg.size.width > 1024) ? (1024/originImg.size.with) : 1 
let scaledImg = UIImage(data:area.image as! Data,scale:scalingFactor)
// 云储存
let imgFile = AVFile(name:"\(area.name).jpg",data:UIImageJPEGRepresentation(scaledImg,0.7)!)
// 云也是image对象 AVFile
cloudObj["image"] = imgFile
 

// 调用云的储存方法cloudObj.saveInBackgroud { (succeed,error) in 

if succeed {
print("云端成功")
}else {
print (error ?? "未知错误")

}

}

 

}

[展开全文]

CoredData 保存数据

按钮通过tag区分

多个BUTTON,同一个IBAction,只要点击+号,直接拉线到其它按钮即可!


@IBAction func isVisitedTap(_ sender:UIButton){

if sender.tag == 8001 {

isVisited = true 

}else {

isVisited = flase 

}

}

// 图片保存

if let imageData = UIImageJPEGRepresentation(doverImageView.image!,0.7) {

area.image = NSData(data:imageData)

// 保存 
// Storyboard 转场

performSegue(withIdentifier:"unwindToHomeList",sender:self)

}

[展开全文]

加起来学会也就2、3个月吧……

老脸通红…

[展开全文]

授课教师

Swift小菜

课程特色

视频(28)
下载资料(2)

学员动态