vc++ 6.0里面的compile、build、go三个按钮是啥区别?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vc++ 6.0里面的compile、build、go三个按钮是啥区别?相关的知识,希望对你有一定的参考价值。
vc++ 6.0里面的compile、build、go三个按钮是什么区别?
还有编译和链接是什么区别和联系?
build:生成exe或DLL、lib等(其中包括了编译和链接的过程)
go;运行
编译器先进行预处理,然后对.cpp源文件进行单独编译生成各自的obj,然后把这些obj文件链接成exe。
编译器负责将源代码文件转换成对象模块,而链接器可使用这些对象模块来创建可执行的程序 参考技术A compile 编译
只编译当前*.cpp文件,如果当前文件为 *.h 则不能编译(会有提示框)。
build 编译并链接
编译所有*.cpp文件,链接生成 *.exe 文件(和debug相关文件)。
go 调试
点后面的手型按钮设置断点,再点go(调试)即可调试程序。。。。
(调试很麻烦,怎么调就慢慢试验吧~~) 参考技术B 编译 测试你的代码是否有误 能否通过
创建 根据你的代码生成目标程序
运行 运行生成的目标程序(GO 单步测试)
区别:
编译就是把代码编辑整理最后翻译成低级语言
链接是把各个文件,组件,资源等等跟程序有关的东西联系到一起来组成目标程序
将值从 VC1 传递到 VC2
【中文标题】将值从 VC1 传递到 VC2【英文标题】:passing value from VC1 to VC2 【发布时间】:2016-10-25 12:15:00 【问题描述】:我现在
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
if indexPath.row == 0
FIRDatabase.database().reference().child("Menus/Day1").observeSingleEvent(of: .value, with: (snap) in
if let snapDict = snap.value as? Dictionary <String, AnyObject>
let date = snapDict["mealPic"] as! String
let OrderInfo = DataService.ds.REF_ORDER
let USERUID = FIRAuth.auth()!.currentUser!.uid
let userinfo = OrderInfo.child(date).child(USERUID).child("data")
self.valueToPass = date
)
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
if(segue.identifier == "ToVari")
var Vari = segue.destination as! Variation
Vari.passedValue = valueToPass
还有我的 VC2 viewDidLoad:-
var passedValue : String!
override func viewDidLoad()
super.viewDidLoad()
MEALDATE.text = passedValue
// Do any additional setup after loading the view.
它确实有效,但奇怪的是 VC2 中的“passedValue”一开始没有显示(我选择 VC1 中的单元格执行Segue 到 VC2)
我必须回到 VC1,然后再次点击单元格到 VC2,让“passedValue”显示它应该在那里的内容。
有人知道为什么会这样吗?
【问题讨论】:
我猜你的 segue 是直接从单元格到下一个 VC,你的 Firebase 调用不是异步的吗?我会将转场从 VC1 放到 VC2(而不是从 VC1 中的单元格),一旦你设置了 valueToPass,我就会执行转场(同时可能会显示一个微调器)。 首先准备 Segue 方法被调用,在 didSelectRowAt 方法被调用之后。这就是为什么你第一次没有得到任何值,但是当你返回并返回时,你会得到存储在 valueToPass 变量中的前一个值 你的 VC1 的 didSelectRowAt 被调用了?还是不行? 【参考方案1】:这可能是由于对 Firebase 的调用是异步的(不是 100% 确定)。另外,您正在从情节提要中调用 segue,因此我建议您遵循以下建议:
从情节提要中删除转场 在您来自 Firebase 的回复中,添加以下内容:self.performSegueWithIdentifier("ToVari", sender: self)
你应该没事的。
【讨论】:
【参考方案2】:这与视图控制器的生命周期有关。简单地说,当你对另一个视图控制器执行 segue 时,应用程序会加载下一个视图控制器的视图,然后显示它。覆盖prepareForSegue
时需要牢记这一点。此时,已经加载了下一个视图控制器的视图,并且在表格的情况下,填充了基本上没有数据的内容。要解决您的问题,您只需告诉表格在视图出现时重新加载。只需在新视图控制器上的 viewWillAppear
中调用 tableView.reloadData()
。 :)
【讨论】:
嗨,Jacob,我的 VC2 中只有一个普通的 UILabel 来显示传递的值。我叫什么 哦,对不起,Ian,我的印象是您的 VC2 包含一个表格视图。对于普通标签,只需确保您在viewWillAppear
中调用 myLabel.text = passedValue
而不是 viewDidLoad
。
我的意思是雅各布,愚蠢的自动更正:(对不起【参考方案3】:
这是由于 Firebase 异步调用。您可以关注@NickCatib 解决方案或
func navigateToNextViewController(valueToPass: String)
let variation = self.storyboard?.instantiateViewControllerWithIdentifier("Variation") as! Variation
variation.passedValue = valueToPass
self.navigationController?.pushViewController(variation, animated: true)
在 Firebase 中异步调用这个函数,将你想要的值传递给它
dispatch_async(dispatch_get_main_queue(), () -> 无效 self.navigateToNextViewController(日期) )
转到情节提要,选择viewController
,在“identity inspector'->identity->storyboardId
”下 -> 输入identifier
。这应该与上述函数中给出的相同。 (例如,identifier
名称与 viewController
名称相同)。
希望这会对你有所帮助。
【讨论】:
【参考方案4】:确保在执行此行后执行 segue:
self.valueToPass = date
只有这样你才能调用(Swift 3):
performSegue(withIdentifier: "ToVari", sender: Self)
【讨论】:
【参考方案5】:只需将tableview的Method改为:
func tableView(tableView: UITableView, willSelectRowAtIndexPath
indexPath: NSIndexPath) -> NSIndexPath? //put your code here
【讨论】:
以上是关于vc++ 6.0里面的compile、build、go三个按钮是啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
求教 vc++编程高手 :compile 与build 有啥区别和联系
vc++ 6.0里面的win32 console application是啥意思