云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

云数据库_网络服务器机柜_限时特惠

小七 141 0

云数据库_网络服务器机柜_限时特惠

在我一年前的第一篇关于移动开发的博客

SAP和Xamarin for Cţmobile跨平台开发教程

中,我详细描述了移动应用程序体系结构。我以前的所有应用程序都是使用Xamarin在Cţ中开发的。当Swift发布时,我想探索这一点,并编写一个基于Xamarin的iphone应用程序Swift和Xcode 6.3。这个博客

描述了我使用SWIFT开发的SAP Plant Stock应用程序。ABAP side REST服务已经按照我之前的博客中的描述开发了。

当我开始我的应用程序时,我想提供我为android和Iphone开发的类似应用程序所提供的所有功能,这个应用程序使用Xamarin(C#)但是在SWIFT和Xcode 6.3中开发此功能

Xamarin原生IPhone和Apple Watch for Plant Stock–第1部分

我使用Xcode创建了一个新的单视图应用程序–删除了创建的视图控制器–添加了一个新的表视图控制器–将此嵌入导航视图控制器(编辑菜单-嵌入导航视图控制器)

创建Swift类一个基于表视图控制器和其他UI视图控制器,并将这些类与序列图像板相关联。创建一个从按钮到第二个视图控制器的序列,允许用户输入选择-对于工厂和位置的材料,我用我得到的数据填充两个选择器从SAP REST call.

为了使REST all成为SAP,我创建了如下协议

protocol SapRestProtocol{

func didereceiveresponse(results:NSArray)

}

因为我想得到工厂和位置的主数据,所以在开始时我更改了appdelegate文件来实现上述协议,读取

class appdelegate:UIResponder,UIApplicationDelegate,SapRestProtocol{

{

///应用程序启动后自定义的覆盖点

checkandFetch()

return true

}

}

func checkandFetch()

{

/

var sapapi:SapRest?=SapRest()

sapapi!。委托=自我

sapapi!。GetSapMasterData("XXXXX",RestTag:"/MADATA/MADATA")

}

func didReceiveResponse(结果:NSArray){

if结果.计数>0{

//填充必须填充在SapRest类中的相应pickers

}

中的location和plant数组我的代码如下

类SapRest:NSObject{

var data:NSMutableData=NSMutableData()

var delegate:萨普雷斯特协议?

func GetSapMasterData(stringPost:String,便宜的云服务器,RestTag:字符串){

let path="

let SapClient="

let userName="

let passWord="

let loginString=NSString(格式:"%@:%@",userName,passWord)

let loginda:NSData=loginString.datausingencode文件(NSUTF8StringEncoding)!

让base64LoginString=loginData.Base64EncodedStringWith选项(NSDataBase64)编码选项.allZeros)

let urlPath=path+RestTag+SapClient;

如果let url=NSURL(string:urlPath){

var request:NSMutableURLRequest=NSMutableURLRequest(url:url)

请求.HTTPMethod="后"

请求.setValue("基本\(base64LoginString)",forHTTPHeaderField:"授权")

varpostData:NSData=stringPost.DataUsingEncode编码(NSUTF8StringEncoding)!

var postLength:NSString=String(postData.length文件)

请求.HTTPBody=postData

请求.setValue(postLength作为字符串,forHTTPHeaderField:"Content Length")

请求.setValue("application/x-www-form-urlencoded",云机服务器,用于httpheaderfield:"Content Type")

请求.setValue("应用程序/json",对于httpheaderfield:"Accept")

如果let connection=NSURLConnection(请求:请求,委托:self,开始时间:假){

连接.启动()

}

}

}

//}

我们现在有两个字符串数组中的工厂和位置,这样当用户单击按钮时–我们将填充选择器并转移到选择屏幕。

对于TableView控制器,我有代码–我们必须实现实现所需函数

类StockListController:UITableViewController{

override func numberOfSectionsInTableView(tableView:UITableView)->Int{

return 1

}

override func tableView(tableView:UITableView,行数节段:Int)->Int{

返回项目.计数

}

@iAction func unwindToStockList(segue:UIStoryboardSegue)

{

如果序列标识符=="UnWindList"{

如果let svc=segue.sourceview控制器作为?选择ViewController{

in_rec=svc.indata公司

如果在_记录材料!=""{

getData()

self.tableView.reloadData()

}

}

}

}

重写func tableView(tableView:UITableView,cellForRowAtIndexPath indexPath:NSIndexPath)->UITableView单元格{

var cell=tableView.dequeueReusableCellWithIdentifier("StockCell",forIndexPath:indexPath)作为?StockCell

如果cell==nil{

cell=UITableViewCell(样式:UITableViewCellStyle.副标题,reuseIdentifier:"StockCell")作为?StockCell

}

var celldata=项目[索引.row];

//配置单元格…

单元格!。TXT工厂!。文本=手机数据.WERKS

手机!。txtLocation!。文本=单元格数据.LGORT

手机!。txtBatch!。文本=手机数据.CHARG

手机!。txtStock!。text=String(格式:"%d",单元格数据.LABST)

返回单元格!

}

请注意"展开"的用法–当用户选择参数并点击"获取"按钮时,这会起作用–此时GetData将调用SAP并根据选择参数获取库存记录

现在让我们查看允许用户输入选择标准的代码,然后单击"获取"以获取用户可以扫描条形码的材料

导入UIKit

导入AVFoundation

类选择ViewController:UIViewController、UIExtFieldDelegate、UIPickerViewDeleteGate、UIPickerViewDataSource、ScannerViewController DeleteGate{

var scannerVC:ScannerViewController!

您必须实现以下委托和数据源方法

func textFieldShouldReturn(textField:UITextField)->Bool{

textField.resignFirstResponder辞职()

return false

}

func SetDataForPicker(PLANTS:[String],位置:[字符串])->(){

自生植物=工厂

自我定位=LOCATIONS

}

override func prepareForSegue(segue:UIStoryboardSegue,轻淘客,sender:AnyObject?){

如果序列标识符!="展开列表"{

scannerVC=segue.destinationViewController作为!扫描神经控制器

扫描代表=self

}

}

覆盖函数视图将出现(动画:Bool){

self.pickerPlant.reloadAllComponents()

self.pickerLocation.reloadAllComponents()

selPlant="ALL"

selLocation=""

}

@IBAction func btnScan(发送方:AnyObject){

}

/-条形码打开时触发捕获-

@IBOutlet弱var pickerPlant:UIPickerView!

@IBOutlet弱var pickerLocation:UIPickerView!

覆盖函数didReceiveMemoryWarning(){

太好了。我收到了记忆警告()

//处理所有可以重新创建的资源。

}

@IBAction func btnGetStock(发送方:AnyObject){

如果selPlant=="ALL"{|||selPlant=="ALL"{

selPlant=""

}

如果selLocation=="ALL"{||selLocation=="ALL"{|selLocation=""

}

如果txtMaterial.text.i空{

let alert=UIAlertController(title:"No Material",

message:"Please Enter Material and Click Get Button",物联网教室,

preferredStyle:。alert)

//显示警报

self.presentview控制器(alert,

animated:true,im即时通讯云,

completion:nil)

return

}

//如果让parentc=self.parentview控制器作为?StockListController{

indata.MATNR公司= txtMaterial.text文件

英达·沃克斯=selPlant

数据.LGORT=销售

indata.CHARG公司=selbatch

}

func numberOfComponentsInPickerView(pickerView:UIPickerView)->Int{

return 1

}

}

我们必须实现所需的委托–单击时将填充选取器数据在工具栏按钮上–

override func prepareForSegue(segue:UIStoryboardSegue,sender:AnyObject?){

//使用[segue destinationViewController]获取新的视图控制器。

//将所选对象传递给新的视图控制器。

如果序列标识符=="ToSelect"{

让vc=segue.destinationViewController作为!选择ViewController

var appdeg=UIApplication.sharedApplication应用程序().委派为!AppDelegate

vc.SetDataForPicker设置(appdeg.工厂,位置:适用位置)

}

否则如果序列标识符=="StockDetail"{

让vc=segue.destinationViewController作为!StockDetailViewController

如果let currpath=tableView.indexPathForSelectedRow表视图(){

vc.datarec公司=项目[currpath.row行]

}

}

}