小编Ber*_*rgP的帖子

什么时候UIView的bounds.origin不是(0,0)?

什么时候UIView bounds.origin不是(0, 0)

这篇文章对我有帮助:

重要!!边界X和Y是原点,用于在视图内移动.对于示例X + 5,将5pix移动到框架原点的左侧意味着将此视图中的所有内容绘制到框架原点的左侧5pix.它对自己没有任何作用,它正在吸引它受到影响.

但它只描述了我设定bounds.origin自己价值的情况.
在其他情况下的价值bounds.origin != (0, 0)

objective-c uiview bounds ios

34
推荐指数
4
解决办法
9765
查看次数

Clang工具:重写ObjCMessageExpr

我想重写我的代码中的所有消息,我只需要替换选择器,但我需要能够替换嵌套的表达式fe:

[super foo:[someInstance someMessage:@""] foo2:[someInstance someMessage2]];
Run Code Online (Sandbox Code Playgroud)

我尝试使用clang::Rewriter replaceText并生成新的字符串,但是有一个问题:如果我更改选择器长度,它将无法工作,因为我用那些旧位置替换嵌套消息.

所以,我认为我需要使用 clang::Rewriter ReplaceStmt(originalStatement, newStatement);

RecursiveASTVisitor用来访问所有消息,我想复制这些消息对象,并替换选择器:

我怎样才能做到这一点?

我试过使用ObjCMessageExpr::Create但是有如此经典的args,我不知道如何从原始消息中获取ASTContext &Context and ArrayRef<SourceLocation> SeLocsExpr *Receiver参数.

使用clang工具(clang工具界面)替换嵌套消息中选择器的正确方法是什么?

更新:

我应该使用ReplaceStmtWithStmt回调ASTMatchFinder吗?

更新:

我正在使用以下函数来重写文件中的文本:

void ReplaceText(SourceLocation start, unsigned originalLength, StringRef string) { 
    m_rewriter.ReplaceText(start, originalLength, string); 
    m_rewriter.overwriteChangedFiles(); 
} 
Run Code Online (Sandbox Code Playgroud)

我想用新的选择器替换代码中的所有messageExpr:它是怎么回事:

[object someMessage:[object2 someMessage:obj3 calculate:obj4]]; 
Run Code Online (Sandbox Code Playgroud)

怎么样:

[object newSelector:[object2 newSelector:obj3 newSelector:obj4]]; 
Run Code Online (Sandbox Code Playgroud)

我正在使用ReqoursiveASTVisitor:

bool VisitStmt(Stmt *statement) { 
    if (ObjCMessageExpr *messageExpr = dyn_cast<ObjCMessageExpr>(statement)) { 
         ReplaceMessage(*messageExpr) 
    } 
    return true; 
} 
Run Code Online (Sandbox Code Playgroud)

我创建了生成新消息expr字符串的方法:

string …
Run Code Online (Sandbox Code Playgroud)

c++ objective-c clang selector llvm-c++-api

17
推荐指数
1
解决办法
1263
查看次数

Swift:如何为静态库创建外部接口(Objective-C .h中的公共头模拟)

我需要用Swift创建一个静态库,我需要知道如何实现库的接口.

在Objective-C中,我可以在构建阶段将所需的头标记为公共头,但Swift中没有任何头和任何接口.

我应该怎么做Swift?

swift

13
推荐指数
2
解决办法
8765
查看次数

如何将swift Dictionary转换为NSDictionary

我正在尝试将[String : String](一个Swift字典)转换NSDictionary为以后用于生成字符串的JSON库

var parcelDict = ["trackingNumber" : parcel.number,
                  "dstCountry" : parcel.countryCode];

if (parcel.postalService != nil) 
{
    parcelDict["postalService"] = parcel.postalService;
}

var errorPtr: NSErrorPointer
let dict: NSDictionary = parcelDict
var data = NSJSONSerialization.dataWithJSONObject(dict, options:0, error: errorPtr) as NSData

return NSString(data: data, encoding: NSUTF8StringEncoding)
Run Code Online (Sandbox Code Playgroud)

let dict: NSDictionary = parcelDict不起作用

let dict: NSDictionary = parcelDict as NSDictionary

var data = NSJSONSerialization.dataWithJSONObject(parcelDict as NSMutableDictionary, options:0, error: errorPtr) as NSData
Run Code Online (Sandbox Code Playgroud)

所有这些例子都不起作用.它们会产生以下错误:

在此输入图像描述

在此输入图像描述

这样做的正确方法是什么?

更新:

有效的代码

var parcelDict = ["trackingNumber" …
Run Code Online (Sandbox Code Playgroud)

nsdictionary ios swift

10
推荐指数
2
解决办法
2万
查看次数

如何为Xcode项目指定其他clang选项?

我已经在本教程的clang帮助下创建了我的自定义插件, 我想在我的Xcode iOS项目上自动运行它.

我需要运行以下附加命令clang,

-Xclang -load \
-Xclang ~/static_analysis/llvm/Debug+Asserts/lib/libPluginExample.so \
-Xclang -plugin -Xclang -example-plugin \
Run Code Online (Sandbox Code Playgroud)

我想保存Xcode生成的所有其他命令,因为很难为每个Xcode项目创建和传递这些命令.这就是我选择使用clang插件而不是clang工具的原因.

我怎么能做到这一点?

或者如何提取xcode生成的编译器标志,以便在clang工具中使用它们?(因为,为了正确使用工具,我需要指定所有包含目录,以及所有源代码和所有框架)

更新:

我在Project中添加了很多命令

设置 - >构建阶段 - >编译源(双击源)

,但在编译时有错误(插件是来自clang源的标准示例libPrintFunctionNames.dylib):

错误:无法加载插件'/Users /...llvm/Debug+Asserts/lib/libPrintFunctionNames.dylib':'dlopen(/ Users /.../ llvm/Debug + Asserts/lib/libPrintFunctionNames.dylib,9) :未找到符号:__ ZN5clang11ASTConsumer21HandleInterestingDeclENS_12DeclGroupRefE引用自:/Users /.../llvm/Debug+Asserts/lib/libPrintFunctionNames.dylib预期在/Users/.../llvm/Debug+Asserts/lib/libPrintFunctionNames中的flat namespace. dylib'命令/应用程序/ Xcode 2.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang失败,退出代码为1

我试图用libPrintFunctionNames.a而不是libPrintFunctionNames.dylib,但它没有帮助.

也许原因是我在llvm和clang的分离源文件上构建了我的插件,而在xcode中我使用了其他版本的clang.我会检查一下.

compiler-construction xcode plugins clang ios

7
推荐指数
1
解决办法
7305
查看次数

实现updateConstraints的正确方法

我应该在updateConstraints方法中更新哪些部分约束?我应该更新与我的子类相关的所有约束吗?在我的UIView子类中,我通常添加仅与此子类中定义的子视图相关的约束数组.

@property(nonatomic, strong) NSArray *subclassConstraints;

- (void)updateConstraints {
 [self removeConstraints:self.subclassConstraints];
 self.subclassConstraints = [self createConstraints];
 [self addConstraints:self.subclassConstraints];
 [super updateConstraints];
}
Run Code Online (Sandbox Code Playgroud)

因此,我的约束,超类约束或子类约束之间不会发生任何冲突.

问题是:我应该更新所有self.subclassConstraints吗?或者我应该只更新一些操作后可能不正确的约束?

如果有一些视图属性,有些可以重置它们或分配nil,我认为所有相关的约束都是不正确的,所以我应该在每次- (void)updateConstraints调用时更新该视图的约束 .

FE

@property (nonatomic, strong) UIImageView *imageSubview;


- (void)setImageSubview:(UIImageView *)imageView {
    if (![_imageView isEqual:imageView]) {
        _imageView = imageView;
        [self setNeedUpdateConstraints];
    }
}

- (void)updateConstraints {
    [self removeConstraints:self.imageViewConstraints];
    self.imageViewConstraints = [self createImageViewConstraints];
    [self addConstraints:self.imageViewConstraints];
    [super updateConstraints];
}
Run Code Online (Sandbox Code Playgroud)

那么我应该在updateConstraints方法中更新所有约束吗?或者我应该只更新其中的一些(像imageViewConstraints)

objective-c uiview ios nslayoutconstraint

7
推荐指数
1
解决办法
3825
查看次数

Swift运行时文档

我一直在探索Apple的快速文档,现在我在这里问.

是否有关于Swift运行时的文档?

我读过The Swift Programming Language一书.https://itunes.apple.com/us/book/swift-programming-language/id881256329?mt=11

我看过WWDC视频.https://developer.apple.com/videos/wwdc/2014/

我试过搜索Swifts编译器源代码或运行时库源代码.

但是我什么都没发现,除了几个实际上关于Obj-c Swift函数调配/运行时的问题

我的意思是,每个人都知道obj-​​c是如何工作的.isa指针,cmd,我们如何调用方法,动态绑定等.我们知道寄存器如何传递参数.我们可以使用MachOView来定义二进制中使用的所有方法和类.有很多关于obj-c运行时,开源运行时库的文档.Clang是开源的.但是迅速呢?

此信息存在于Objective-C的集中位置.我要求相当于Obj-C运行时库文档.

swift

7
推荐指数
1
解决办法
3052
查看次数

如何以编程方式设置UIView的topBar和bottomBar参数?

在界面构建器中,UIViewController的UIView参数很少:topBar,bottomBar,...

在此输入图像描述 界面构建器的视图参数

当我为Top Bar参数设置导航栏值并为Bottom Bar参数设置Tab栏时会发生什么?这对我非常有用.

那么,我怎么能以编程方式呢?

iphone interface-builder uiviewcontroller uiview ios

6
推荐指数
1
解决办法
4392
查看次数

"otool"和"file"无法显示".a"文件的体系结构

我用cMake为ARM7构建了一些静态库.通常,当您对.a文件使用next命令时,它会显示以下体系结构:

FE

mac:libs User$ file ./libcurl.a 
./libcurl.a: Mach-O universal binary with 3 architectures
./libcurl.a (for architecture armv6):   current ar archive random library
./libcurl.a (for architecture armv7):   current ar archive random library
./libcurl.a (for architecture i386):    current ar archive random library
Run Code Online (Sandbox Code Playgroud)

或者fe

mac:libs User$ otool -vf ./libboost_regex.a 
Fat headers
fat_magic FAT_MAGIC
nfat_arch 3
architecture armv6
    cputype CPU_TYPE_ARM
    cpusubtype CPU_SUBTYPE_ARM_V6
    capabilities 0x0
    offset 68
    size 9550024
    align 2^2 (4)
architecture armv7
    cputype CPU_TYPE_ARM
    cpusubtype CPU_SUBTYPE_ARM_V7
    capabilities 0x0
    offset 9550092
    size 9390544
    align …
Run Code Online (Sandbox Code Playgroud)

arm file build cmake otool

6
推荐指数
1
解决办法
3682
查看次数

没有加载缩放的MKMapView图块

我有一个问题.我正在使用a MKMapView来显示一些注释.我使用默认缩放初始化地图视图.它会显示一些地图.

在此输入图像描述

但是当我尝试缩放时,瓷砖没有加载,并且地图变空.像这样.

在此输入图像描述

我通过界面构建​​器创建了Map View.

@property (nonatomic, weak) IBOutlet MKMapView* mapView;
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?是否存在任何强制实施方法,这些方法会对此功能产生影响?是的,我的设备上有互联网连接.

iphone objective-c mapkit mkmapview ios

6
推荐指数
1
解决办法
1783
查看次数