我正在寻找用于Solaris调试器的用户友好的手册 - mdb我可以在其中找到检查堆栈的示例.我试着寻找一段时间的答案,但我能找到的只是官方手册,只有少数私人页面没有那么多信息.
我有一个依赖于静态库的项目.在Xcode 3.2.3中,构建库的项目被设置为目标设置中的直接依赖项,以便在构建主项目时构建库.
我不能为我的生活弄清楚这应该如何在Xcode 4中工作.我没有改变任何项目/目标设置但是依赖库不会构建.有没有人成功设置库依赖项,以便它们自动构建在Xcode 4中?
CGRect fullWindowRect = [UIScreen mainScreen].applicationFrame;
Run Code Online (Sandbox Code Playgroud)
获取可用的rect,减去状态栏是一种简单的方法.随着iPad/iPhone在这些基本系统指标上越来越不同,我想在UINavigationBar到位时停止减去44以获得屏幕高度.定位物品非常重要,这样它们就可以通过自己的高度从屏幕底部偏移,即与屏幕底部对齐.
什么是神奇的功能,当然你不仅应该为两个(或更多)可能的导航栏高度做出争议并记住何时应用它们?我在这里或其他地方找不到答案,但我经常发现"44".
我发现目标iOS 4的iPhone应用程序崩溃了,这取决于构建类型.
调试器给了我很多东西,它停止了
UIViewController *result = [self factory](self);
Run Code Online (Sandbox Code Playgroud)
使用EXC_BAD_ACCESS.self是一个继承自NSObject的类(如下所示为NSObjectInheritor).僵尸已启用.我尝试factory用以下结果改变方法三种方法.
这在调试和临时构建中都崩溃了......
- (FactoryMethod) factory;
{
return [^ UIViewController * (NSObjectInheritor *newThing)
{
return [[ViewControllerClass alloc] initWithStuff:(boolValue ? foo : bar)];
} autorelease];
}
Run Code Online (Sandbox Code Playgroud)
这适用于调试版本,但在ad hoc中崩溃...
- (FactoryMethod) factory;
{
return [^ UIViewController * (NSObjectInheritor *newThing)
{
if(boolValue)
{
return [[ViewControllerClass alloc] initWithStuff:foo];
}
else
{
return [[ViewControllerClass alloc] initWithStuff:bar];
}
} autorelease];
}
Run Code Online (Sandbox Code Playgroud)
这既适用于调试也适用于ad hoc,但非常难看和冗余:
- (FactoryMethod) factory;
{
if(boolValue)
{
return [^ UIViewController * (NSObjectInheritor *newThing) …Run Code Online (Sandbox Code Playgroud) 我开始尝试使用以前使用过代码的IB.我已经为iPad/iPhone Portrait/Landscape创建了笔尖,所以我有四种可能的视图.所有文件所有者都设置为UIViewController,都有一个对象从调色板集添加到我的NSObject子类"TargetObject".设置IBActions/IBOutlets没问题,只需按住Ctrl键拖动即可在一个笔尖中创建代码,然后右键单击该对象并将操作/出口拖动到其他笔尖中的右控件,以便所有连接都存在碎粒.我们的想法是,app委托启动当前设备的相应视图控制器,然后该视图控制器根据方向加载正确的视图.
(也许有自动掌握这种方法是没有必要的 - 我想知道是否有可能这样做,因为让布局重新排列自己恰到好处的那些IB控件是非常非常令人沮丧的.)
这些一对多视图和目标对象背后的想法是我可以在应用程序的任何地方使用它们.例如,我显示的内容是核心数据中的对象,我希望允许在应用程序的多个位置进行详细查看/编辑.这似乎是一种非常MVC的做事方式.
当我这样做时,问题出现在视图控制器的loadView中:
NSArray *portraitViewArray = [[NSBundle mainBundle] loadNibNamed:@"Weekview_iPad_Portrait" owner:self options:nil];
portraitWeekView = [portraitViewArray objectAtIndex:0];
NSArray *landscapeViewArray = [[NSBundle mainBundle] loadNibNamed:@"Weekview_iPad_Landscape" owner:self options:nil];
landscapeWeekView = [landscapeViewArray objectAtIndex:0];
// this object is intended to be a common target for portrait and landscape arrays.
weekViewTarget = [portraitViewArray objectAtIndex:1];
UIInterfaceOrientation interfaceOrientation = self.interfaceOrientation;
if(interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
self.view = portraitWeekView;
else
self.view = landscapeWeekView;
Run Code Online (Sandbox Code Playgroud)
正如您猜测的那样,纵向方向的一切都很好,但在景观中,与目标对象的任何交互都会崩溃.weekViewTarget对象引用使用纵向视图创建的对象,因此横向视图正在查找未使用引用保留的其他实例.在横向视图中_viewDelegate是nil - 它是私有的,所以我无法在代码中修复它.
我也可以使用引用来保持横向目标对象,但是每当方向改变时都会出现问题 - 在任何有状态控件(如UITableView)的情况下,数据源/委托将发生更改,从而导致旋转时的奇怪用户体验.除非我确保目标对象仅实现简单操作,并使用单独的共享对象为任何表视图或所需的文本视图实现数据源/委托对象.
我想到的一件事是让目标成为单身人士.看起来像一个黑客,这将是无法工作的时间.
使用公共目标对象创建作为nib实现的多个视图的正确方法是什么?
进展 - 如果我给每个目标一个指向它自己类型的指针,事情就会开始起作用:
WeekViewTarget …Run Code Online (Sandbox Code Playgroud)这可能很容易.我正在使用GCDAsyncSocket接收可变数量的字节,这些字节表示来自服务器的离散数据块,这些数据块出现在NSMutableData对象中.
如果数据是单词,它可能如下所示:
ChunkChunkChunkChu
nkChunkChunkChunkCh
Run Code Online (Sandbox Code Playgroud)
因此,在处理了三个块之后,剩余部分块"Chu"并且必须保留,以便下一批数据可以竞争该块.
现在处理流程如下所示:
receive data, appending to myBuffer
process contents of buffer up to last complete chunk
create new myBuffer with partial fragment of remaining data chunk at end of buffer
back to the start
Run Code Online (Sandbox Code Playgroud)
这很有效,但我不确定它是否是最有效的方式.我看到NSMutableData有一个replaceBytesInRange,我可以用来从缓冲区的开始删除已处理的字节数,但据报道它是一个缓慢的操作.
有关最佳方法的任何建议吗?如果它有所作为我使用ARC,所以我希望减少创建/释放的开销.
Swift中的结构可以包含函数并且可以包含扩展.凉!看起来像一个简洁的方法,使这个功能可用于更多的类,并减少参数传递.这是函数最初在地图视图控制器中查看的方式:
func expandTrackRectToCoordinate(coordinate : CLLocationCoordinate2D) {
let point = MKMapPointForCoordinate(coordinate)
let newRect = MKMapRectMake(point.x, point.y, 0.0, 0.0)
if MKMapRectIsNull(trackRect) {
trackRect = MKMapRectMake(point.x, point.y, 0.0, 0.0)
} else {
trackRect = MKMapRectUnion(trackRect, newRect)
}
}
Run Code Online (Sandbox Code Playgroud)
trackRect 是该类的MKMapRect成员.
MKMapRect扩展为包括每个点,以便可以根据需要将地图重置为整个区域,显示所有点.
我试图将它作为MKMapRect的扩展(部分 - 显示直到错误):
extension MKMapRect {
func expandToIncludeCoordinate(coordinate : CLLocationCoordinate2D) {
let point = MKMapPointForCoordinate(coordinate)
let newRect = MKMapRectMake(point.x, point.y, 0.0, 0.0)
if MKMapRectIsNull(self) {
self.origin = point <-------- Cannot assign to 'origin' in 'self'
self.size = CGSizeZero
} else {
Run Code Online (Sandbox Code Playgroud)
我没想到能够分配给自己,但我确实希望能够分配给结构的成员.如何才能做到这一点?
上一个问题看起来像是在问类似的问题,但没有得到回答。
我是否可以只更改服务器上的图像,保持相同的 URL,并依靠 HTTP 304 和其他机制重新加载新版本的图像,即使它们存在于缓存中?
我的第一个想法是,对图像的任何更改都必须同时更改图像的名称以强制刷新。
可能的解决方法 - 假设我有一堆共享公共 URL 根的图像,例如https://server/path/A/image.png和https://server/path/B/anotherimage.png。我可以从一个路径中删除所有图像而不使另一个无效 - 例如,当涉及由 的内容表示的一大块信息的内容https://server/path/A发生更改时,我可以重新加载与其关联的每个图像,但不能重新加载其他文件夹中的图像?
到目前为止,我对 Kingfisher 的使用是基本的,使用 UIImageView 上的扩展:
myImage.kf.setImage(with: imageURL)
嗨,我想更新密钥的数据,但它仍然保持不变我的代码是:
NSUserDefaults *userNamePrefs = [NSUserDefaults standardUserDefaults];
[userNamePrefs removeObjectForKey:@"mykey"];
[userNamePrefs setObject:@"myNewStringValue" forKey:@"mykey"];
Run Code Online (Sandbox Code Playgroud)
但它不起作用它不删除对象而忽略为键添加新值,请帮助我缺少什么
谢谢
iphone ×5
ios ×2
objective-c ×2
xcode ×2
caching ×1
cocoa ×1
debugging ×1
dependencies ×1
kingfisher ×1
solaris ×1
swift ×1
xcode4 ×1