小编Dav*_*ong的帖子

在UIWebView加载时如何实现UIActivityIndi​​catorView?(iPhone ObjC)

我想知道如何在基于WebView的应用程序中实现activityIndi​​cator,我写了下面的代码,但指标没有出现.

webview在本地加载文件,因此加载速度非常快,但是当它加载外部页面时加载速度很慢,我需要指标...

FirstViewController.h

 #import <UIKit/UIKit.h>

 @interface FirstViewController : 
 UIViewController <UIWebViewDelegate>{
    IBOutlet UIWebView *webview1;   
    NSURL *urlLocation;     
    IBOutlet UIActivityIndicatorView *m_activity; 
 }

 @property (nonatomic, retain) UIActivityIndicatorView *m_activity;

 - (IBAction)searchbutton:(id)sender;
 - (IBAction)home:(id)sender;

 @end
Run Code Online (Sandbox Code Playgroud)

FirstViewController.m

 #import "FirstViewController.h"

 @implementation FirstViewController


 @synthesize m_activity;

 // viewWillAppear loads every time younopen up this View

 - (void)viewWillAppear:(BOOL)animated {
   NSString *filePath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];          
   urlLocation = [NSURL fileURLWithPath:filePath];  
   [webview1 loadRequest:[NSURLRequest requestWithURL:urlLocation]]; 
 }




 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {     
  if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {      
     //Initialization code      
     m_activity = …
Run Code Online (Sandbox Code Playgroud)

iphone xcode objective-c activity-indicator

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

为什么不崩溃?

我试图将一个bug缩小到最小可重复的情况并发现一些奇怪的东西.

考虑以下代码:

static NSString *staticString = nil;
int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    if (staticString == nil) {
        staticString = [[NSArray arrayWithObjects:@"1", @"2", @"3", nil] componentsJoinedByString:@","];
    }   

    [pool drain];

    NSLog(@"static: %@", staticString);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

期待这段代码崩溃.相反,它记录:

2011-01-18 14:41:06.311 EmptyFoundation[61419:a0f] static: static: 
Run Code Online (Sandbox Code Playgroud)

但是,如果我NSLog()改为:

NSLog(@"static: %s", [staticString UTF8String]);
Run Code Online (Sandbox Code Playgroud)

然后,它不会崩溃.

编辑更多信息:

排水后:

NSLog(@"static: %@", staticString);  //this logs "static: static: "
NSLog(@"static: %@", [staticString description]); //this crashes …
Run Code Online (Sandbox Code Playgroud)

memory-management objective-c autorelease

9
推荐指数
2
解决办法
1230
查看次数

带有节的NSCollectionView - 就像在iPhoto中一样

我想构建一个类似于iPhoto '11中的NSCollectionView.我想在部分中分组几个图片,并创建一个部分标题.特定部分的节标题始终可见,直到该节的最后一个元素可见.你可以看看图片,看看我的意思.

编辑:我应该补充说,内容不是图像.

在此输入图像描述

提前致谢

xcode cocoa iphoto nscollectionview

9
推荐指数
1
解决办法
2493
查看次数

NSPredicate,NsNumber numberWithFloat:0.0(iPhone)

嗨,我有核心数据数据库与数字属性.他们是NSNumbers.默认值是0.0但是当我尝试做一些NSPredicated fetch时,我得到"'NSInvalidArgumentException',原因:'无效谓词:nil RHS'"只是因为属性值是0.0

谓词创建时使用:

[NSPredicate predicateWithFormat:@"(startValue => %@) AND (endValue <= %@) AND (someId == %@)",startNSNumber,endNSNumber, idString]
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题 ?

iphone nsnumber nspredicate

8
推荐指数
1
解决办法
8819
查看次数

8
推荐指数
1
解决办法
2234
查看次数

为什么在类方法BAD中"self = [[Rectangle alloc] init]"?

在Apple的"Objective-C Programming Language"文档中,第48页说:

+ (Rectangle *)rectangleOfColor:(NSColor *) color
{
    self = [[Rectangle alloc] init]; // BAD
    [self setColor:color];
    return self;
}

+ (id)rectangleOfColor:(NSColor *)color
{
     id newInstance = [[Rectangle alloc] init]; // GOOD
     [newInstance setColor:color];
     return newInstance;
}


+ (id)rectangleOfColor:(NSColor *)color
{
     id newInstance = [[self alloc] init]; // EXCELLENT
     [newInstance setColor:color];
     return newInstance;
}
Run Code Online (Sandbox Code Playgroud)

一个是坏的,一个是好的,另一个是优秀的.这是为什么?

cocoa objective-c class-method

8
推荐指数
3
解决办法
546
查看次数

shadowOffset在iOS中做了什么?

我无法在任何地方找到这些信息,所以问这里.

究竟element.layer.shadowOffset = CGSizeMake(2.0, 2.0)]做了什么?

它对元素的偏移量是多少?

ios ios7

8
推荐指数
2
解决办法
9364
查看次数

有条件的宏扩张

抬头:这是一个奇怪的问题.

我有一些非常有用的宏,我喜欢用来简化一些日志记录.例如,我可以做到Log(@"My message with arguments: %@, %@, %@", @"arg1", @"arg2", @"arg3"),那将得到扩展成包括像一个更复杂的方法调用self,_cmd,__FILE__,__LINE__,等等,这样我可以轻松地跟踪,事情越来越记录.这非常有效.

现在我想扩展我的宏,不仅可以使用Objective-C方法,还可以使用常规的C函数.问题是宏扩展中的self_cmd部分.C函数中不存在这两个参数.理想情况下,我希望能够在C函数中使用同一组宏,但我遇到了问题.当我使用(例如)我的Log()宏时,我得到编译器警告self_cmd未声明(这完全有道理).

我的第一个想法是做类似以下的事情(在我的宏中):

if (thisFunctionIsACFunction) {
  DoLogging(nil, nil, format, ##__VA_ARGS__);
} else {
  DoLogging(self, _cmd, format, ##__VA_ARGS__);
}
Run Code Online (Sandbox Code Playgroud)

这仍然会产生编译器警告,因为整个if()语句被替换代替宏,导致self_cmd关键字出错(即使它们在函数执行期间永远不会被执行).

我的下一个想法是做这样的事情(在我的宏中):

if (thisFunctionIsACFunction) {
  #define SELF nil
  #define CMD nil
} else {
  #define SELF self
  #define CMD _cmd
}
DoLogging(SELF, CMD, format, ##__VA_ARGS__);
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用.我得到了"错误:'#'后面没有宏参数" #define. …

c macros conditional objective-c

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

如何在iOS项目中实现CHCircularBuffer?

对于我的游戏iOS项目,我需要一个环形缓冲区.它应该类似于一个队列,其中元素输出并进入,但缓冲区中元素的总量应保持不变.

我使用java成功实现了环形缓冲区,但我不熟悉objective-c.我在网上找到了一个名为CHCircularBuffer的环形缓冲区实现:https://bitbucket.org/devartum/chdatastructures/src/4d6d7194ee94/source/CHCircularBuffer.m 但是我没能正确实现它.

循环缓冲区是名为TerrainManager的类的属性,它可以生成所有数学地形.

@interface TerrainManager : NSObject{

    int terrainParts;

    CHCircularBuffer* circularTerrainBuffer;
}

@property(nonatomic, retain) CHCircularBuffer *circularTerrainBuffer;
@end
Run Code Online (Sandbox Code Playgroud)

这是如何在TerrainManager的实现中初始化环形缓冲区

circularTerrainBuffer = [[CHCircularBuffer alloc] initWithCapacity:parts];
Run Code Online (Sandbox Code Playgroud)

这将创建缓冲区的实例,并将size属性设置为parts.现在我使用addObject方法将对象添加到缓冲区:

[circularTerrainBuffer addObject:[NSNumber numberWithDouble:0.2]];
Run Code Online (Sandbox Code Playgroud)

有时这行会收到错误"exec_bad_access".例如,当我初始化容量为15的缓冲区时,一切都很好,20我得到了错误.

我现在尝试从绘图发生的terrain类访问缓冲区.但每当我尝试访问对象时,我都会收到"bad_access"错误.

NSArray *arr = [terrainManager.circularTerrainBuffer allObjects];
Run Code Online (Sandbox Code Playgroud)

例如,这一行会产生错误.

所以我的代码有问题.也许我不理解缓冲区并以错误的方式添加对象.我不知道.任何想法或建议?

objective-c circular-buffer chdatastructures

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

垂直对齐UINavigationItems

我已经将UINavigationBar的高度定制为100px,我想在这个自定义栏上添加按钮.

一切都很好,除了按钮似乎想要坐在导航栏的底部,无论如何.我不能让它与导航栏的中心或顶部对齐.

在此输入图像描述

这是代码; 首先,我在app delegate中创建一个导航控制器,并在右侧添加一个按钮.

// set main navigation controller
temp *tempc = [[temp alloc] initWithNibName:@"temp" bundle:nil];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:tempc];

UIBarButtonItem *navItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:nil action:nil];

[tempc.navigationItem setRightBarButtonItem:navItem];
[self.window addSubview:self.navigationController.view];
[self.window makeKeyAndVisible];
Run Code Online (Sandbox Code Playgroud)

然后我在"临时"视图控制器中调整导航栏的大小,如下所示:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, 100.0f);
    [self.navigationController.navigationBar setFrame:frame];
    [self.navigationController.navigationBar setAutoresizingMask:UIViewAutoresizingFlexibleBottomMargin];
}
Run Code Online (Sandbox Code Playgroud)

我还尝试向rightBarButtonItem添加自定义视图,但我无法将添加的自定义视图完全触及顶部.

在此输入图像描述

这个不幸的尝试的代码:

// set main navigation controller
temp *tempc = [[temp alloc] initWithNibName:@"temp" bundle:nil];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:tempc];

UIView *customView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, …
Run Code Online (Sandbox Code Playgroud)

objective-c uinavigationbar uinavigationcontroller uinavigationitem ios

7
推荐指数
3
解决办法
8086
查看次数