小编zpa*_*ack的帖子

使用llvm :: Linker以编程方式查找未解析的外部

我正在使用clang/llvm以编程方式编译和链接C源代码.我发现llvm链接器似乎没有报告模块中存在未解析的外部因为错误的事实.

我有以下代码(原谅长度,但这确实是最低要求):

int CompileAndLink()
{
    llvm::InitializeNativeTarget();

    std::string code = "int UnresolvedFunction();\n"
                       "int main() { return UnresolvedFunction(); }";

    clang::DiagnosticOptions diagnosticOptions;
    clang::TextDiagnosticPrinter tdp( llvm::outs(), diagnosticOptions );    
    llvm::IntrusiveRefCntPtr<clang::DiagnosticIDs> diagIDs( new clang::DiagnosticIDs );
    clang::Diagnostic diag( diagIDs, &tdp, false );

    clang::FileSystemOptions    fsOptions;
    clang::FileManager fm( fsOptions ); 

    clang::SourceManager sm( diag, fm );
    clang::HeaderSearch hs( fm );   

    clang::TargetOptions targetOptions;
    targetOptions.Triple = llvm::sys::getHostTriple();
    clang::TargetInfo* ti = clang::TargetInfo::CreateTargetInfo( diag, targetOptions );         

    clang::HeaderSearchOptions  headerSearchOptions;        
    clang::LangOptions langOptions;
    clang::ApplyHeaderSearchOptions( hs, headerSearchOptions, langOptions, ti->getTriple() );

    clang::PreprocessorOptions ppo;
    clang::Preprocessor pp( diag, langOptions, *ti, sm, …
Run Code Online (Sandbox Code Playgroud)

c c++ linker llvm clang

5
推荐指数
1
解决办法
1963
查看次数

NSTextView的insertText:*真的*不适合编程修改文本吗?

我编写了一个NSTextView子类,它对文本本身进行频繁的编程修改(有点像IDE的代码格式化 - 例如自动插入紧密括号).

我最初的实现使用了NSTextView insertText:.这实际上看起来完全正常.但是在阅读NSTextView文档时(我有时会为了好玩),我在讨论部分注意到insertText:

此方法是插入用户键入的文本的入口点,通常不适用于其他目的.最好通过直接对文本存储进行操作来对文本进行编程修改.

哦,我的坏,我想.因此,我尽职尽责地将所有insertText调用更改为对底层NSTextStorage(replaceCharactersInRange:withString:主要是)的调用.这似乎工作正常,直到我注意到它完全搞砸了Undo(当然,因为Undo是由NSTextView处理的,而不是NSTextStorage).

所以在我把文件存储器中的buncha撤销代码拖出来之前,我想知道我insertText:是不是Punk'd,真的不是那么糟糕?

是的,所以我的问题是:NSTextView的insertText:调用真的"不适合"编程修改NSTextView的文本,如果是的话,为什么呢?

macos cocoa nstextview

5
推荐指数
1
解决办法
1285
查看次数

如何以编程方式检测Game Center?

我正在为游戏添加Game Center支持.因为我的游戏可以在iOS版本上运行回3.0,所以我想让它在没有Game Center的情况下在本地保存成就和排行榜.

现在,我有这个:

+ (BOOL) isGameCenterAvailable {
 Class playerClass = NSClassFromString( @"GKLocalPlayer" );
 if( playerClass != nil && [playerClass localPlayer] != nil ) {
  DebugLog( @"Game Center is available" );
  return YES;
 }

 DebugLog( @"Game Center is NOT available" );
 return NO;
}
Run Code Online (Sandbox Code Playgroud)

但是,这似乎根本不起作用.首先,尽管GKLocalPlayer参考声明此类在iOS 4.1及更高版本中可用,但上述测试在iOS 4.0中通过(我没有尝试早期版本).另外,测试还传递了具有iOS 4.1但不支持Game Center的设备(例如,iPhone 3G).

我已经在线浏览了各种GameKit和游戏中心文档,并且没有任何运气可以解决这个问题.我当然可以检测到操作系统版本,但这似乎很蹩脚.对于不支持的硬件(如3G)的情况,这也无济于事.我想也可以检测到这一点,但是再次看起来有点蹩脚.

以编程方式检测Game Center支持的"正确方法"是什么?

iphone objective-c gamekit ios4 ios

4
推荐指数
1
解决办法
1652
查看次数

与iPhone5兼容的应用程序和反向

我知道为早于iPhone5的iPhone开发的应用程序正在信箱中工作.但逆转怎么样.一款应用已更新至iPhone5标准.它如何在iPhone4上运行?

如果没有,当所有开发者更新他们的应用程序时,旧的iPhone将没有应用程序或更新?

iphone iphone-5

4
推荐指数
1
解决办法
1538
查看次数

在iPhone MVC应用程序中处理用户首选项的最佳实践?

我正在开发我的第一个iPhone应用程序,在实现用户首选项时,我有一些关于如何最好地实现它的问题.

假设基本的MVC模式:MainView显示存储在Model对象中的数据; MainViewController处理app逻辑.

对于选项,我有一个OptionsView和一个OptionsViewController.RootViewController处理Main和Options视图的交换.

首先,选项数据怎么样?我想创建一个NSOjbect派生类来存储它们(一个OptionsModel)吗?或者一个简单的NSDictionary就足够了?

第二,谁拥有期权数据?它们是应用程序首选项,但将它们存储在AppDelegate中似乎是错误的.MainViewController主要关注选项,而OptionsViewController需要编辑它们,但是这些人不会彼此了解,也不应该相互了解.RootViewController知道两者,所以他处于一个很好的位置,可以在它们之间传递选项,但同样,这似乎是错误的.

最后,MainViewController将经常需要访问选项.他应该每次调用选项模型来获得一些选项,还是缓存他自己的副本?我不喜欢额外开销检索选项数据的想法,但让MainViewController具有可能不同步的副本也不是很吸引人.

iphone model-view-controller objective-c options preferences

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

xcode 5现在警告是什么错误 - 控制可能达到非空函数的结束

所以我一直在Xcode4中为一个有多个集合视图的应用程序工作(准确地说是4)

我有两个视图,一个底部的"主"视图,其中包含一个填充屏幕的大型集合视图,以及一个较小的"抽屉"视图,可以从侧面拉出并包含三个窄的,水平滚动的集合视图,一个堆叠在一起另一个的顶部.

我一直使用标签和cellforitematpath方法中的if语句来填充单元格.在xcode 4中,以及我在xcode 4中创建的项目,我现在在xcode 5中打开,这是有效的.我在底部得到一个警告(而不是错误)control may reach end of non void function,但我仍然可以构建和运行它的工作原理.

在xcode 5中的一个新项目中,相同的代码将"控制可能达到非空函数的结尾"视为错误,并且不允许构建和运行.这无穷无尽令人沮丧.除非有一个数组要填充单元格,否则我不想返回单元格.我甚至都不知道'返回零'是什么意思.有没有人有任何关于如何关闭它的建议?

以下绝对不是很好,请自担风险:

- (UICollectionViewCell *) collectionView:(UICollectionView *)collectionView
                   cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    if (collectionView.tag == 0){
        static NSString *CellIdentifier = @"subjectCell";
        SubjectCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];

        AHSubject *cellSubject = [self.subjectsArray objectAtIndex:indexPath.row];

        [[cell subjectLabel]setText:cellSubject.name];

        return cell;
    }
    else if (collectionView.tag == 1){
        if ([categoryArray count] > 0) {
            static NSString *CellIdentifier = @"categoryCell";
            CategoryCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];

            AHCategory *cellCategory = [categoryArray objectAtIndex:indexPath.row]; …
Run Code Online (Sandbox Code Playgroud)

iphone xcode objective-c ios

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

UITableView,在选择时更改配件时出现问题

我正在使用UITableView来选择一个(很多)项目.与选择铃声时的UI类似,我想要检查所选项目,而不是其他项目.我想在触摸时选择单元格,然后将其设置为正常颜色(再次,就像铃声选择UI一样).

UIViewController子类是我的表的委托和数据源(不是UITableViewController,因为我还有一个工具栏).

我在cellForRowAtIndexPath:中设置单元格的accessoryType,并在didSelectRowAtIndexPath:中选择单元格时更新我的​​模型.我可以想到将所选单元格设置为复选标记(并清除前一个单元格)的唯一方法是在didSelectRowAtIndexPath:中调用[tableView reloadData].但是,当我这样做时,单元格取消选择的动画很奇怪(单元格的标签应该出现一个白框).当然,如果我不调用reloadData,则accessoryType不会更改,因此不会出现复选标记.

我想我可以关闭动画,但这似乎很蹩脚.我也玩弄了改变didSelectRowAtIndexPath:中的细胞,但这是一个很大的痛苦.

有任何想法吗?缩写代码如下......

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell* aCell = [tableView dequeueReusableCellWithIdentifier:kImageCell];
    if( aCell == nil ) {
        aCell = [[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:kImageCell];
    }

    aCell.text = [imageNames objectAtIndex:[indexPath row]];
    if( [indexPath row] == selectedImage ) {
        aCell.accessoryType = UITableViewCellAccessoryCheckmark;
    } else {
        aCell.accessoryType = UITableViewCellAccessoryNone;
    }
    return aCell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    selectedImage = [indexPath row]
    [tableView reloadData];
}
Run Code Online (Sandbox Code Playgroud)

iphone objective-c uitableview

0
推荐指数
1
解决办法
9632
查看次数

iPhone 4:何时保存数据?

我有一个应用程序(游戏),可以保存数据:游戏状态,高分,成就等.目前,应用程序代表执行此操作applicationWillTerminate:.在使用iPhone 4之后,似乎应用程序几乎永远不会终止:它们只是永远在后台运行,除非用户竭尽全力退出它们,或重新启动手机.

所以我的问题是,我应该找到另一个地方来保存我的数据,如果是,那么什么时候?

iphone iphone-4

0
推荐指数
1
解决办法
1048
查看次数