-(void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
if([recievedData length]) [ recievedData setLength:0 ];
download_size =[response expectedContentLength];
}
Run Code Online (Sandbox Code Playgroud)
我有这个代码.download_size是NSInteger.expectedContentLenght总是返回:-1.也许有人知道为什么?我尝试使用很长时间,但效果是一样的.
感谢帮助.
的文档
- (void)geocodeAddressString:(NSString *)addressString completionHandler:(CLGeocodeCompletionHandler)completionHandler;
Run Code Online (Sandbox Code Playgroud)
文件明确指出:
在前向地理编码请求的情况下,如果提供的信息产生多个可能的位置,则可以返回多个地标对象.
声明它返回一个地标数组.然而,即使我搜索我确定知道的物品有多个条目(好莱坞,华盛顿,丹麦,主要街道等)我总是只有一个条目.
有些人只是耸耸肩说使用谷歌API,但我担心请求限制.
是否有一些设置或黑客来解决这个问题,还是CLGeocoder简单地破坏了?
更新:
使用NSXMLParser类方法时initWithContentsOfURL,不是在下载XML提要时进行解析,而是尝试将整个XML文件加载到内存中,然后才启动解析过程.如果XML提要量很大(使用过多的RAM,本身效率低下,因为它不是与下载并行解析,而是仅在下载完成后才开始解析等),这是有问题的.
有没有人发现如何使用源将数据流传输到设备来解析NSXMLParser?是的,您可以使用LibXML2(如下所述),但似乎应该可以使用它NSXMLParser.但这是在逃避我.
原始问题:
我正在努力使用NSXMLParser从Web流中读取XML.如果您使用initWithContentsOfURL,虽然界面可能会导致人们推断它会从Web流式传输XML,但它似乎不会这样做,而是在尝试进行任何解析之前尝试先加载整个XML文件.对于适度大小的XML文件来说这很好,但是对于非常大的XML文件来说,这是有问题的.
我已经看到NSXMLParser了initWithStream与NSInputStream从网络流式传输的一些定制使用相关的讨论.例如,有一些答案建议使用类似下面的Cocoa Builder帖子中CFStreamCreateBoundPair引用的内容和Apple Stream Programming Guide中关于设置套接字流的讨论,但我还没有使用它.我甚至尝试写我自己的子类是使用(这是它本身,在流还不错),但我无法得到它与一起工作.NSInputStreamNSURLConnectionNSXMLParser
最后,我决定使用LibXML2而不是NSXMLParser,如Apple XMLPerformance示例中所示,但我想知道是否有人有幸从使用的网络源获取流媒体NSXMLParser.我见过很多"理论上你可以做X "之类的答案,这一切从CFStreamCreateBoundPair给抓住了HTTPBodyStream从NSURLRequest,但我还没有遇到与流的工作演示NSXMLParser.
Ray Wenderlich文章如何为您的iPhone项目选择最佳的XML解析器似乎证实它NSXMLParser不适合大型XML文件,但是所有帖子都有关于NSXMLParser基于可能的解决方案的流量来传输非常大的XML文件,我我很惊讶我还没有找到这方面的工作示范.有谁知道NSXMLParser从网络流出的功能实现?显然,我可以坚持使用LibXML2或者其他一些等效的XML解析器,但是流式传输的概念NSXMLParser似乎非常接近.
我创建了一个NSOperation子类来处理一些zip存档操作.无论如何,如果我覆盖-start或者-main这段代码总是发生:
if ([NSThread isMainThread]) {
NSLog(@"I am in the main thread");
return;
}
Run Code Online (Sandbox Code Playgroud)
知道发生了什么事吗?
我试过添加这个块:
- (void) start { //also tried overriding main
if ([NSThread isMainThread]) {
NSLog(@"In main thread, trying again");
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self start];
});
return;
//hard working code etc...
//cpu intensive zip operations...
}
Run Code Online (Sandbox Code Playgroud)
但这会导致崩溃,EXC_BAD_ACCESS违规指向该dispatch_async线.
objective-c nsoperation nsoperationqueue grand-central-dispatch ios
我最近一直在学习Objective C,我决定尝试连接.
NSURLConnection的一切都很棒,直到我发现它已经过时,并尝试使用NSURLSession.
我正在尝试一个非常简单的示例,但似乎无法让我的应用程序在完成块中运行代码.
这是使用的代码:
NSURL * url = [NSURL URLWithString:@"http://api.openweathermap.org/data/2.5/weather?q=London,uk"];
NSLog(@"2");
NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];
NSLog(@"3");
NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject
delegate: nil
delegateQueue: [NSOperationQueue mainQueue]];
NSLog(@"4");
NSURLSessionDataTask * dataTask = [defaultSession dataTaskWithURL:url
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"11");
if(error == nil)
{
NSString * text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
NSLog(@"Data = %@",text);
}
NSLog(@"22");
});
}];
NSLog(@"5");
[dataTask resume];
NSLog(@"6");
Run Code Online (Sandbox Code Playgroud)
我从主执行中获取了所有数字,但是从未执行completionHandler.我也尝试使用代表,但没有成功.
提前致谢.
编辑 按照建议,我已将我的功能更改为以下内容:
-(void) doGET{
NSURLSessionConfiguration *defaultConfigObject = …Run Code Online (Sandbox Code Playgroud) 我想添加2个参数NSURLRequest.有没有办法或者我应该使用AFnetworking?
我想为以下内容增加Int价值multipartFormData:
Alamofire.upload(.POST,
url,
headers: headers,
multipartFormData: { multipartFormData in
//add some jpg image
//add other vaues:
for (key, value) in parameters {
if value is String {
multipartFormData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key)
} else if value is Int {
let convertedValueNumber: NSNumber = NSNumber(int: value.intValue)
let data = NSKeyedArchiver.archivedDataWithRootObject(convertedValueNumber)
multipartFormData.appendBodyPart(data: data, name: key)
}
}
}, encodingCompletion: { encodingResult in
//some processing
})
Run Code Online (Sandbox Code Playgroud)
但服务器返回错误,我不发送Int值.如何Int为参数添加值?
我正在通过我的网络服务验证我的用户,然后通过php-jwt创建Firebase自定义令牌:
// Requires: composer require firebase/php-jwt
use Firebase\JWT\JWT;
// Get your service account's email address and private key from the JSON key file
$service_account_email = ...;
$private_key = ...;
function create_custom_token($uid, $is_premium_account) {
global $service_account_email, $private_key;
$now_seconds = time();
$payload = array(
"iss" => $service_account_email,
"sub" => $service_account_email,
"aud" => "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
"iat" => $now_seconds,
"exp" => $now_seconds+(60*60), // Maximum expiration time is one hour
"uid" => $uid,
"claims" => array(
"premium_account" => $is_premium_account
)
);
return …Run Code Online (Sandbox Code Playgroud) 我已经访问了地址簿并成功完全从中提取了记录和必要的信息.我也提取了recordid.我的问题是如何使用此记录来稍后提取记录.我使用的代码是:
ABRecordID recordId;
ABAddressBookRef _addressBookRef = ABAddressBookCreate ();
NSArray* allPeople = (NSArray *)ABAddressBookCopyArrayOfAllPeople(_addressBookRef);
for (id record in allPeople) {
recordId = ABRecordGetRecordID(record);
//i am saving each one how to use them later to extract particular record
}
Run Code Online (Sandbox Code Playgroud) 我是应用程序开发的新手,所以这可能是一个微不足道的问题,但请帮助!
我正在尝试使用UIImagePickerController类将视频保存到相机胶卷.到目前为止,我已成功拉起相机并保存图像.我也能够录制视频,但是当我按下"使用视频"时,它不会保存到相机胶卷.
下面是附加的didFinishPickingMediaWithInfo函数.
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject])
{
let mediaType = info[UIImagePickerControllerMediaType] as NSString
self.dismissViewControllerAnimated(true, completion: nil)
if mediaType.isEqualToString(kUTTypeImage as NSString)
{
let image = info[UIImagePickerControllerOriginalImage] as UIImage
if (newMedia == true)
{
UIImageWriteToSavedPhotosAlbum(image, self, "image:didFinishSavingWithError:contextInfo:", nil)
}
else if mediaType.isEqualToString(kUTTypeMovie as NSString)
{
let videoPath = info[UIImagePickerControllerMediaURL] as NSString
if(newMedia == true)
{
UISaveVideoAtPathToSavedPhotosAlbum(videoPath, self,
"image:didFinishSavingWithError:contextInfo:", nil)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是useVideo例程.
@IBAction func useVideo(sender: AnyObject)
{
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera)
{
let imagePicker = UIImagePickerController()
imagePicker.delegate …Run Code Online (Sandbox Code Playgroud) ios ×7
objective-c ×4
iphone ×2
swift ×2
alamofire ×1
clgeocoder ×1
connection ×1
firebase ×1
geocoding ×1
int ×1
ipad ×1
json ×1
nsdata ×1
nsoperation ×1
nsurlrequest ×1
nsurlsession ×1
nsxmlparser ×1
php ×1
php-jwt ×1
post ×1