标签: nsdata

iphone sdk看到本地文件的大小(由应用程序创建的一个)

无论如何,我可以查看应用程序以字节为单位创建的文件的大小,然后存储该号码以便以后使用?或者有什么方法我可以判断一个NSArray中的对象是否为空,我已经尝试了一切,但它只是不起作用!

iphone cocoa file nsdata nsarray

3
推荐指数
1
解决办法
4651
查看次数

为什么我从NSData读取字节时会得到不同的值,具体取决于我获取字节的顺序?

好吧,这更像是"到底是怎么回事?" 而不是一个实际问题.但鉴于我对C的相对缺乏经验,它可能会导致更大的问题.

基本上,我正在解析wav文件的标题并获取值.在我的头文件中,我定义了类变量:

short channels;
int sampleRate;
int bytesPerSecond;
short bytesPerSample;
short bitsPerSample;
unsigned int size;  
Run Code Online (Sandbox Code Playgroud)

并且类中用于获取这些值的函数如下:

NSData * fileData = [[NSData alloc] initWithContentsOfFile:filePath];
[fileData getBytes:&channels range:CHANNELS_R];
[fileData getBytes:&sampleRate range:SAMPLES_R];
[fileData getBytes:&bytesPerSecond range:BYTES_PER_SEC_R];
[fileData getBytes:&bytesPerSample range:BYTES_PER_SAMPLE_R];
[fileData getBytes:&bitsPerSample range:BITS_PER_SAMPLE_R];
[fileData getBytes:&size range:LENGTH_R];
Run Code Online (Sandbox Code Playgroud)

范围先前定义:

const NSRange CHANNELS_R = {22,23};
const NSRange SAMPLES_R = {24,27};
const NSRange BYTES_PER_SEC_R = {28,31};
const NSRange BYTES_PER_SAMPLE_R = {32,33};
const NSRange BITS_PER_SAMPLE_R = {34,35};
const NSRange LENGTH_R = {40,43};
Run Code Online (Sandbox Code Playgroud)

这工作正常,我得到所有的值,但是,如果我按顺序移动其中一行,或者在标题中的一个变量定义,它们会得到一个完全不同的值.例如,我正在进行的测试wav的采样率为8000.使用上面的代码我得到了正确的值.但是如果我移动指定它的值超过通道线的值,我得到524288000.太棒了.基本上,如果给出变量的顺序,它们的值与它们的定义顺序不对应,那就会混淆它.范围似乎对此行为没有任何影响.

任何人都知道这里发生了什么?

cocoa objective-c nsdata

3
推荐指数
1
解决办法
1539
查看次数

如何将NSData字节转换为NSNumber或NSInteger?

有一种特殊的NSString initWithData方法可以抓取位并将它们转换为字符串.但是,我没有在NSNumber课堂参考中找到.目前,我正在以NSData格式从服务器获取原始数据(字节).我知道如何在C中使用memcpy和使用int指针.但我很好奇直接做的便利方法是什么NSData.无需转换.例如,我正在获取00000010字节,我需要将其转换NSNumber为值2,或者NSInteger.

iphone objective-c nsdata ios

3
推荐指数
1
解决办法
1万
查看次数

iOS - 仅在修改时下载文件(NSURL和NSData)

我正在从服务器下载一堆图像文件,我想确保只有在它们更新时才下载它们.此方法目前正好下载图像.但是,每次用户登录应用程序时,我都不想浪费时间或精力重新下载图像.相反,我只想下载A)不存在的任何文件B)服务器上的文件比设备上的文件更新

以下是我下载图像的方式:*图像网址与其关联的视频保存在Core Data中.使用我构建的简单转换方法生成url(generateThumbnailURL)

-(void)saveThumbnails{
    NSManagedObjectContext *context = [self managedObjectContextThumbnails];
    NSError *error;
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription
                                   entityForName:@"Videos" inManagedObjectContext:context];
    [fetchRequest setEntity:entity];
    NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
    NSLog(@"Videos: %i",fetchedObjects.count);
    if (fetchedObjects.count!=0) {
        for(Videos *currentVideo in fetchedObjects){
            // Get an image from the URL below
            NSURL *thumbnailURL = [self generateThumbnailURL:[currentVideo.videoID intValue]];

            UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:thumbnailURL]];

            // Let's save the file into Document folder.
            // You can also change this to your desktop for testing. …
Run Code Online (Sandbox Code Playgroud)

download nsurl uiimage nsdata ios

3
推荐指数
1
解决办法
3272
查看次数

确定UTF-8编码的NSData是否包含以null结尾的字符串

我在NSData类别中有NSData-to-NSString转换,因为我总是使用NSString方法:initWithData:encoding:.但是,根据这个答案,/sf/answers/172749951/,并不是那么简单.

到目前为止,我在我的NSData类别中使用了此方法,以便与其他数据对象中的方法保持一致,这些方法从具有相同名称的方法返回字符串:

- (NSString *) stringValue
{
    return [[NSString alloc] initWithData:self encoding:NSUTF8StringEncoding];
}
Run Code Online (Sandbox Code Playgroud)

到目前为止它是成功的,但我想确定一个字符串是否以null结尾,以决定是否应该使用此方法,也来自答案链接:

NSString* str = [NSString stringWithUTF8String:[data bytes]];
Run Code Online (Sandbox Code Playgroud)

如何确定UTF-8编码是否NSData包含以空值终止的字符串?


得到下面的答案后,我为我的NSDataCategory方法编写了更全面的实现,stringValue:

- (NSString *) stringValue
{
    //Determine if string is null-terminated
    char lastByte;
    [self getBytes:&lastByte range:NSMakeRange([self length]-1, 1)];

    NSString *str;

    if (lastByte == 0x0) {
        //string is null-terminated
        str = [NSString stringWithUTF8String:[self bytes]];
    } else {
        //string is not null-terminated
        str = [[NSString …
Run Code Online (Sandbox Code Playgroud)

objective-c character-encoding nsstring nsdata ios

3
推荐指数
1
解决办法
2201
查看次数

如何在Objective-C中对NSData进行按位异或?

我有两个NSData对象data1和data2,我想进行按位XOR并将结果存储在第三个NSData对象xorData中。

我尝试的第一件事是:

*data1.bytes^*data2.bytes;
Run Code Online (Sandbox Code Playgroud)

但是它给出了一个错误:

无效的二进制二进制操作数(“ const void”和“ const void”)

因此,我试图编写一个函数,该函数将数据字节提取到整数数组中,对整数执行异或运算,然后将结果保存回NSData对象。该函数如下所示:

+(NSData *) DataXOR1:(NSData *) data1
DataXOR2:(NSData *)data2{
    const int *data1Bytes = [data1 bytes];
    const int *data2Bytes = [data2 bytes];
    NSMutableArray *xorBytes = [[NSMutableArray alloc] init ];
    for (int i = 0; i < data1.length;i++){
         [xorBytes addObject:[NSNumber numberWithInt:(data1Bytes[i]^data2Bytes[i])]];
    }
    NSData *xorData = [NSKeyedArchiver archivedDataWithRootObject:xorBytes];
    return xorData;
}
Run Code Online (Sandbox Code Playgroud)

这会运行,但给出错误的答案。当我在两个简单的数据(data1 = 0x7038和data2 = 0x0038)上对其进行测试,并使用NSLog输出值时,我得到:

data1Bytes[0] = 8070450532247943280
data2Bytes[0] = 8070450532247943168
data1Bytes[0]^data2Bytes[0] = 112
data1Bytes[1] = 10376302331560798334
data2Bytes[1] = 10376302331560798334
data1Bytes[1]^data2Bytes[1] = 0
Run Code Online (Sandbox Code Playgroud)

这让我有点困惑,因为dataXBytes数组中的值是完全错误的,但是它们将异或为正确的值!(0x70 …

objective-c xor endianness nsdata xcode5

3
推荐指数
1
解决办法
3024
查看次数

在IOS中实施AES256加密

这是我的java代码.现在我想在Objective-C中实现相同的功能.

Cipher encryptCipher;
IvParameterSpec iv = new IvParameterSpec(key);
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
encryptCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
encryptCipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = encryptCipher.doFinal(dataToEncrypt.getBytes());
Log.d("TAG", "encrypted string:"
        + Base64.encodeToString(encrypted, Base64.DEFAULT));
return Base64.encodeToString(encrypted, Base64.DEFAULT).trim();
Run Code Online (Sandbox Code Playgroud)

这是我的iOS实现

- (NSData *)AES256EncryptWithKey:(NSString*)key
{
    char keyPtr[kCCKeySizeAES256 + 1];
    bzero(keyPtr, sizeof(keyPtr));
    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];

    NSUInteger dataLength = [self length];

    size_t bufferSize           = dataLength + kCCBlockSizeAES128;
    void* buffer                = malloc(bufferSize);

    size_t numBytesEncrypted    = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
                                  kCCAlgorithmAES128,
                                  kCCOptionPKCS7Padding,
                                  keyPtr,
                                  kCCKeySizeAES256,
                                  NULL,
                                  [self bytes],
                                  dataLength,
                                  buffer, …
Run Code Online (Sandbox Code Playgroud)

iphone encryption aes nsdata commoncrypto

3
推荐指数
1
解决办法
6126
查看次数

无法读取数据,因为格式不正确."

从邮递员请求图像[![来自邮递员的回复图片] 2我正在使用AFNetworking将数据发送到server.Below是我的代码:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    [manager setRequestSerializer:[AFJSONRequestSerializer serializer]];
    [manager setResponseSerializer:[AFJSONResponseSerializer serializer]];
    [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];


    NSMutableDictionary *dict = [[NSMutableDictionary alloc]init];

    [dict setValue:[[arrLoginDetails objectAtIndex:0] objectForKey:@"id"] forKey:@"user_id"];

    [dict setValue:[[arrLoginDetails objectAtIndex:0] objectForKey:@"id"] forKey:@"shipper_id"];

    [dict setValue:strUuid forKey:@"imageOrderId"];

    [dict setValue:@"1" forKey:@"type"];

    NSData * imageData = UIImageJPEGRepresentation([aryImages objectAtIndex:0], 0.7);


   if([imageData length]>0){
    NSString *base64String = [imageData base64EncodedStringWithOptions:0];


    if([base64String length]>0){
    [dict setValue:base64String forKey:@"file_path"];

       NSString * reqFormat= [NSString stringWithFormat:@"%@&email=%@&dev_id=%@",UploadImage,[[arrLoginDetails objectAtIndex:0] objectForKey:@"email"],APP_DELEGATE.stringDeviceID];

 [manager POST:reqFormat parameters:dict1 success:^(AFHTTPRequestOperation *operation, id responseObject)
     {
  }failure:^(AFHTTPRequestOperation *operation, NSError *error)
     {
         NSLog(@"error:%@",error.debugDescription);

 }
Run Code Online (Sandbox Code Playgroud)

以下是我得到的错误: …

iphone objective-c nsdata ios afnetworking-3

3
推荐指数
1
解决办法
4072
查看次数

如何从Swift 3中的数据中读取属性列表

我正在尝试property listDataSwift 3中读取一个,但我无法实现.

我尝试过这样的事情:

let datasourceDictionary = try! PropertyListSerialization.propertyList(from: data!, options: [PropertyListSerialization.ReadOptions], format: nil) as! Dictionary
Run Code Online (Sandbox Code Playgroud)

我得到了这个错误:

无法将"PropertyListSerialization.ReadOptions.Type"类型的值(也称为"PropertyListSerialization.MutabilityOptions.Type")转换为预期的元素类型"PropertyListSerialization.MutabilityOptions"

然后我尝试了类似这样的东西,就像我以前在Swift 1.2上做的那样:

let datasourceDictionary = try! PropertyListSerialization.propertyList(from: data!, options: [PropertyListSerialization.MutabilityOptions.immutable], format: nil) as! Dictionary
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

'immutable'不可用:使用[]构造一个空选项集

然后我尝试了这个:

let datasourceDictionary = try! PropertyListSerialization.propertyList(from: data!, options: [], format: nil) as! Dictionary
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

'[Any]'不能转换为'PropertyListSerialization.ReadOptions'(又名'PropertyListSerialization.MutabilityOptions')

如何property list从"Swift 3中的数据"中读取文件或者执行此操作的方法是什么?

nsdata swift swift3

3
推荐指数
2
解决办法
5476
查看次数

如何在swift 3中压缩数据?

我在Swift 3中的文件管理器中有一些文件.我想上传它们,但是当我将它们转换为base 64时,它们的大小将是巨大的!所以我想在将数据转换为base 64之前压缩数据.

这是我的转换代码:

for i in 0...(rows?.count)! - 1 {

   let filePath = filesurl[fileManagerViewController.selectedFileIndex[i]]
        do {
            let fileData = try Data.init(contentsOf: filePath)

            let fileStream:String = fileData.base64EncodedString(options: NSData.Base64EncodingOptions.init(rawValue: 0))

            fileManagerViewController.upupload.append(fileStream)


        } catch {
            print(error.localizedDescription)
        }


        }
Run Code Online (Sandbox Code Playgroud)

我用了

let compressedData = fileData(UF_COMPRESSED)
Run Code Online (Sandbox Code Playgroud)

但这对我不起作用,所以请在将文件转换为base 64进行上传之前帮助我压缩文件.

compression base64 nsdata ios swift3

3
推荐指数
2
解决办法
3981
查看次数