2014-02-12 31 views
-1

我试图在for循环中的变量i命名的桌面上创建9个文本文件。在每个文本文件中,我想写一个由我的bigInt函数确定的长整型值。在移动到下一个文本文件之前,必须将该长整型值写入文件1000次。不过,我不断收到错误:Incompatible pointer types sending 'NSString*' to parameter of type 'NSData*'写入长文件时出错的错误Objective-C

我的功能:

long bigInt(int i){ 
    long big = 99*(i*99); 
    long evenBigger = big*(big*(big*big)); 
    return evenBigger; 

} 

我的主要方法:

long use; 
int x = 0; 

for (int i = 1; i<10; i++) { 

    while (x < 1000) { 
     use = bigInt(i); 
     //[NSString stringWithFormat:@"%ld", use]; 
     //NSString *content = @"Text to write to file"; 
     NSString *path = [NSString stringWithFormat: @ "/Users/ou_snaaksie/Desktop/%i.txt", i]; 
     //NSData *fileContents = [use dataUsingEncoding:NSUTF8StringEncoding]; 
     [[NSFileManager defaultManager] createFileAtPath:path contents:[NSString stringWithFormat:@"%ld", use] attributes:nil]; 
     x++; 
    } 


} 
+0

符号整数arithemetic在while循环的身体试试这个不保证“环绕”,事实上,溢出有符号整数类型会导致未定义的行为。 – dreamlax

+0

“但我不断收到错误:向'NSData *'类型的参数发送'NSString *'的指针类型不兼容。呃,也许这是因为你没有阅读'createFileAtPath'的规范? –

+0

我做过了,但就像我说过的我是Objective-C的新手,并不明白如何将方法添加到对象。例如:我会说'dataContents.writeToFile()' –

回答

1

你传递一个字符串作为内容时,它需要的NSData。你必须将字符串转换为NSData。

use = bigInt(i); 
NSString* str = [NSString stringWithFormat:@"%ld", use]; 
NSData* data_contents = [str dataUsingEncoding:NSUTF8StringEncoding]; 
NSString *path = [NSString stringWithFormat: @ "/tmp/%i.txt", i]; 
[data_contents writeToFile:path atomically:YES]; 
x++; 
+0

当我将代码块添加到while循环时,它不会创建我的文本文件 –

+0

我认为这是因为您的应用程序不允许写入到桌面。将路径更改为/tmp/%i.txt – connor

+0

不,我尝试了其他一些路径。有人可以尝试并成功运行代码吗?我渴望objective-c(来自Java),我不太了解NSData –

1

我认为你需要传递的NSData而不是NSString的对象contentscreateFileAtPath:contents:attributes:方法也可以做类似如下:

if (![[NSFileManager defaultManager] fileExistsAtPath:path]) { 
    [[NSFileManager defaultManager] createFileAtPath:path contents:nil attributes:nil]; 
} 

[[string dataUsingEncoding:NSUTF8StringEncoding] writeToFile:path atomically:YES]; 
+0

您有一个竞争条件...有可能在'fileExistsAtPath:'和后面的'createFileAtPath:'之间创建一个文件。 – dreamlax