我已经看到了关于SO之间进行转换的许多问题NSURL和NSString.他们都涉及使用NSString *path = [myURL absoluteString];或NSString *path = [myURL path];. 这些方法之间的实际区别是什么? 是否有人应该使用另一个? 我尝试过咨询Apple Docs,但我觉得它不太有帮助.
我习惯于在网站和有关在不同机器之间发送信息的其他主题的讨论中提及URL,而在单个机器上处理文件结构时从未被提及过.也许这就是我的一些困惑所在,因为它NSURL似乎是访问文件的首选方式,无论该文件是存在于网络上还是存在于本地设备上.或者这可能是一个完全不相关的话题.我甚至都不确定.
我有一些十进制数字,我需要在适当的时候写入带有前导零的文本文件.我对此做了一些研究,我见过的所有内容都表明:
REAL VALUE
INTEGER IVALUE
IF (VALUE.LT.0) THEN
IVALUE = CEILING(VALUE)
ELSE
IVALUE = FLOOR(VALUE)
ENDIF
WRITE(*,1) IVALUE, ABS(VALUE)-ABS(IVALUE)
1 FORMAT(I3.3,F5.4)
Run Code Online (Sandbox Code Playgroud)
根据我的理解,IF块和ABS部分应该允许它适用于-100 <VALUE <1000的所有值.如果我设置VALUE = 12.3456,上面的代码应该产生"012.3456"作为输出,它确实如此.但是,如果我有类似的东西VALUE = -12.3456,我会得到"(3个星号).3456"作为我的输出.我知道当FORMAT声明中没有提供足够的字符时,通常会显示星号,但在本例中3应该足够了(" - "为1个字符,"12"为2个字符).我还没有测试过类似的东西VALUE = -9.876,但我希望输出为"-09.8760".
我对它的工作原理有什么不妥吗?或者我违反了这项技术的其他一些限制?
更新:好的我已经对此进行了更多研究,它似乎是负值和I3.3格式的组合.如果VALUE为正且我有I3.3,则会按预期放置前导零.如果VALUE为负数且我只有I3我的格式,我得到正确的值输出,但在负号之前用空格填充,而不是在负数之后用零填充(所以-9.8765输出为"-9.8765",但是那个领先的空间打破了我正在使用的.txt文件,所以这是不可接受的).
是否可以呈现UIAlertView并且不会继续执行该方法中的其余代码,直到用户响应警报?
提前致谢.
我的公司有一堆Fortran代码.传统上,我们将所需的代码编译成.dll,并在需要完成计算时调用.dll.我们现在正在尝试创建一个iPad应用程序,遗憾的是我们不能再调用.dll了.
我的一个同事设法创建了一个简单的命令行工具项目,我们调用Fortran文件在调试器中编写"Hello,World".但是,当我试图让它在基于视图的iPad应用程序上工作时,我收到一堆链接器错误,说明我正在使用的符号无法找到.我知道命令行工具使用.cpp文件来实际运行Fortran,我看到很多关于在应用程序中调用.cpp文件的线程,但我看到的所有文件都已过时,直接相互矛盾,他们的修复不适合我.
我的问题是,是否有更直接的方法直接从.m文件调用Fortran? 如果没有,我需要做什么才能使用命令行工具并将其放入应用程序?
更新1:按照评论中发布的教程,我已经能够从我的Fortran代码创建一个.o文件.我可以做一个文件添加文件来轻松添加它,但现在我该如何实际调用呢?
更新2:好的,宝贝步骤.我发现你可以使用终端命令从.o文件("source_file.o")创建一个.a静态库(我称之为"new_library")ar crv new_library.a source_file.o(你可以通过添加source_file2.o source_file3.ofor 来为多个.o文件创建它.尽可能多的.o文件 - 注意:请确保使用cd到达.o文件所在的文件夹).我很确定Xcode可以使用.a文件,但似乎还需要.h文件让项目中的其他文件(如视图控制器)调用.a文件中的内容.我知道我可以从Xcode本身创建一个新的.a文件(新建项目 - > iOS - >框架和库 - > Cocoa触摸静态库),但是当我以前这样做的时候,我只是写得正常. m和.h文件,当我构建新库时,它只将所有.m文件混合成1 .a.当我想在另一个项目中使用.a中的代码时,我只是将.a和所有.h文件导入到新项目中,我可以调用.a文件中的方法,就像我已经导入了所有单独的.m文件.那么下一个问题是,当我的.a是用终端代替Xcode时,我还需要.h吗? 如果是这样,我将如何制作Fortran头文件? 如果没有,我如何在.a中调用我的Fortran代码?
我有一个嵌入UIViewController其中的几个UITableView.对于某些表,我需要显示带有多个标签的自定义标题视图.对于其他表格,我根本不想显示标题(也就是说,我希望第一个单元格位于myTable2框架的顶部myTable2).这是我的大致内容:
- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
if (tableView == self.myTable1)
// Wants Custom Header
{
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0,0,tableView.contentSize.width,20);
// ... Do stuff to customize view ...
return view;
}
elseIf (tableView == self.myTable2)
// Wants No header
{
return nil;
// also tried
// return [[UIView alloc] initWithFrame:CGRectMake(0,0,0,0)];
// but that didn't work either
}
}
Run Code Online (Sandbox Code Playgroud)
这适用于自定义标题,但对于我不想要任何标题的表格,它显示一个白色框.我想这return nil;会阻止为该表显示任何标题.这个假设是否正确?还有别的东西会覆盖吗?我怎么能这样做才能显示出来?
我的应用程序需要来自sqlite数据库的数据.它将附带此数据库的一个版本,但我需要定期更新它(很可能每月一次).通常情况下,我一直在通过我设置的一堆网络服务将我的应用程序的其他部分的更新作为XML发送,但我现在正在处理的这个特定数据库非常大(大约20-30 MB),而且我当我尝试以这种方式发送时出现超时错误.
我尝试将数据库放在公司服务器上,然后将其下载到NSData对象中.然后我将该数据对象保存到我的应用程序的Documents目录中.当我重新启动我的应用程序时,我收到一条错误消息"路径中的文件似乎不是SQLite数据库".代码如下.
// Download data
NSURL *url = [NSURL URLWithString:@"http://www.mysite.net/download/myDatabase.sqlite"];
NSData *fileData = [[NSData alloc] initWithContentsOfURL:url];
NSLog(@"%@",fileData); // Writes a bunch of 8 character (hex?) strings
// Delete old database
NSError *error;
NSURL *destination = [app applicationDocumentsDirectory];
destination = [destination URLByAppendingPathComponent:@"myDatabase"];
destination = [destination URLByAppendingPathExtension:@"sqlite"];
NSLog(@"destination = %@",destination);
[[NSFileManager defaultManager] removeItemAtPath:[destination path] error:&error];
// Save into correct location
[fileData writeToURL:destination atomically:YES];
//[NSFileManager defaultManager] createFileAtPath:[destination path] contents:fileData attributes:nil]; // I also tried this, it doesn't work either.
Run Code Online (Sandbox Code Playgroud)
是否有更新应用程序将使用的大型数据库的标准过程?我觉得我正在尝试做的是不正确的,并且有一种完全不同的方式来做到这一点,但我无法弄清楚是什么. …
我正在开发一个iPad应用程序,它依赖于一个非常庞大的有价值信息数据库.我自己并不太熟悉这个设备(我没有个人iPad,也没有在开发这个应用程序之外使用过它).用户无法通过我的应用程序在任何地方直接查看数据库中的数据.
有没有其他方式用户可以访问我的数据库中的数据(可能通过将设备插入计算机并通过Xcode或iTunes)?如果没有,我一直在阅读越狱,我已经看到这样做可以允许用户访问设备的文件系统,那么是否允许他们查看我的数据库的内容?或者通过越狱和安装应用来查看越狱设备上的数据库文件是否可能(事实上,这个问题表明,为越狱设备开发"数据库阅读器"应用程序可能非常容易)?
在过去,我已经使用预加载的数据库发布了我的应用程序,因此用户无需在首次运行时更新它.我在另一个关于SO的问题中发现了一些代码(抱歉,我没有链接)我添加到我的App Delegate的persistentStoreCoordinator方法中:
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"db.sqlite"];
if (![[NSFileManager defaultManager] fileExistsAtPath:[storeURL path]])
{
NSURL *preloadURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"db" ofType:@"sqlite"]];
NSError* err = nil;
if (![[NSFileManager defaultManager] copyItemAtURL:preloadURL toURL:storeURL error:&err])
{
NSLog (@"Error - Could not preload database.");
}
}
//... more code generated from the template here
}
Run Code Online (Sandbox Code Playgroud)
当我尝试在iOS 7中执行此操作时,我没有收到任何错误,但数据库是空的(即使我的数据库中mainBundle包含我期望的所有信息).我注意到有更多的数据库文件(.sqlite-shm文件和.sqlite-wal文件)applicationDocumentsDirectory.我还需要对这些文件做些什么吗?或者是否已经不再可以将预装数据库与应用程序一起发货?
编辑:我尝试添加代码来复制新的.sqlite-shm和.sqlite-wal文件,但这没有帮助.
我有一个方法,我打电话来计算我在一个自定义UITableViewCell子类中的一堆标签的大小,它在一个UIPopoverController.当用户旋转设备时,我需要重新计算尺寸,然后重新绘制表格以使用新尺寸.我尝试检测旋转的每个方法都是折旧的,不会被调用,或者在正确的时间没有被调用.是否有一种方法会在旋转设备时自动调用,我可以重新计算我的尺寸?
编辑:我尝试了什么,为什么它不起作用:
shouldAutorotate - 没有被称为 - 显然是贬值.layoutSubviews- 被召唤,但如果我试着进入[self.tableView reloadData]这里,我会陷入无限循环NSNotificationCenterobserver for UIDeviceOrientationDidChangeNotification- 在我的控制器知道它的新尺寸之前调用,所以我不能在这里重新计算我的尺寸[self.tableView setNeedsDisplay]in layoutSubviews- 不提示重新绘制表格.didRotateFromInterfaceOrientation - 没有被称为 - 显然是贬值.编辑2:关于我正在尝试做的更多细节
我正在尝试模仿"行 - 列"样式表,并排列标签以模仿列.当我重新计算大小时,我遍历表的所有行,然后遍历该行中的每个"列".我得到每列的宽度,并跟踪每列的所有行中的最大宽度.然后我操纵宽度和字体大小之间的间距来获得它,这样如果任何行在每列中都有最宽的标签,它仍然适合屏幕.
背景
我建立一个iOS应用程序(这我就打电话MyApp从这里开始),这将依赖于由几个独立的静态库进行计算(我称之为Lib1,Lib2,Lib3,...).每个库建在它自己的项目,然后导入到一个工作区(这样的工作区将包含MyApp,Lib1,Lib2,...).有关如何设置此处的更多详细信息.这些库由其他独立的产品使用MyApp,因此我希望尽量减少库中的任何更改.这些库也是用(plain)编写的C,因此没有头文件.
某些功能名称由多个存储库中使用(因此两者Lib1和Lib2可能各自具有DoStuff方法).具有相同名称的功能大致做同样的事情,但对于如何是做到这一点,可以是磁带库之间不同的一些具体的,所以在实际的代码DoStuff就Lib1可能比代码完全不同DoStuff的Lib2.编写一个DoStuff在每个库中完全相同的通用将是非常困难的.
问题
当应用程序正在运行时,它没有DoStuff从正确的库中调用正确的.我发现了这一点,因为在调试会话期间调用了错误的函数(由于DoStuff函数的细微差别,最终导致应用程序崩溃).
我在寻找什么
每个库只有一个入口点MyApp,每个入口点都有唯一的名称.如果DoStuff从入口点方法Lib1(或任何其他方法Lib1)调用,那么我希望它调用该DoStuff方法Lib1.实现这一目标的最佳方法是什么?
有没有办法(可能通过XCode中的某个设置)我可以这样做,以便每个库都是它自己的命名空间?这将是我解决问题的首选方法.我想我可以通过并重命名重复的函数,以便它们都是唯一的(因此DoStuff方法Lib1可以重命名为Lib1DoStuff或类似的东西),但有数百个函数可能有重复的名称,我们将是将数百个库添加到项目中,因此必须手动重命名所有函数并修复对它们的所有调用将花费大量时间,而我的老板并不认为这是一个可行的选择.
UPDATE
在查看了Josh Caswell的评论以及他提供的一些链接后,看起来可能会在编译库时自动重命名所有函数,这将是尝试修复THE ISSUE上述内容的最佳方法.从我所看到的,objcopy在评论中的几个链接中提到的内容不支持iOS.我终于碰上了这个博客条目,其中谈到创建自定义生成Xcode的目标规则,这个博客,谈到了自定义生成设置和构建阶段.
我是否正确地假设我可以在构建过程中的某个时刻使用脚本自动附加到我的每个库中的所有函数的名称,而不是像我在上一WHAT …
objective-c ×7
ios ×6
fortran ×2
ios7 ×2
xcode ×2
collision ×1
core-data ×1
formatting ×1
iphone ×1
jailbreak ×1
modal-dialog ×1
nsurl ×1
sqlite ×1
uialertview ×1
uitableview ×1
updates ×1