小编Bry*_*hen的帖子

如何在使用pedantic标志进行编译时从C++中的(void*)重新输入到int而不会收到任何警告?

我有mutlithread通过通信的客户端 - 服务器应用程序sockets.我使用这种结构创建新线程:

 pthread_t thread;
 pthread_create(&thread, NULL, c->sendMessage, (void *) fd);
Run Code Online (Sandbox Code Playgroud)

其中fd是连接的ID,c->sendMessage是一个函数,在创建新线程并处理该线程后调用.在这个函数中,我需要通过发送一些消息send(int sockfd, const void *buf, size_t len, int flags);

所以我sockfd这样说:

void * Client::sendMessage(void *threadid) {
   int sockfd = (int) threadid;
   // some more code here and in the end I send the data via send(int sockfd, const void *buf, size_t len, int flags)
}
Run Code Online (Sandbox Code Playgroud)

我使用-pedanticflag 编译,大多数编译器(包括我的编译器)在编译期间不会抛出任何警告或错误.但一些编译说,从这个重复输入过程中抛出一个错误void *int是不安全的,可能会导致loose of precision.我明白,这不是一个好的解决方案,应该做得更清洁.但我无法弄清楚如何.任何人都可以建议我任何干净的练习,如何重新输入ponter到int并避免编译期间的任何警告?

c++ gcc compilation

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

未声明的选择器goBack警告和无法识别的选择器发送到实例终止

我一直在阅读许多类似的问题和答案,但仍然不太明白这里出了什么问题.

我正在尝试创建一个按钮以返回上一个视图,但我不断收到标题中提到的错误.有人可以告诉我我做错了什么吗?

 UIImage *image = [UIImage imageNamed:@"listbutton.png"];
UIButton *listbutton = [UIButton buttonWithType:UIButtonTypeCustom];
listbutton.bounds = CGRectMake( 0, 0, image.size.width, image.size.height );
[listbutton setImage:image forState:UIControlStateNormal];
[listbutton addTarget:self action:@selector(goBack:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:listbutton];
Run Code Online (Sandbox Code Playgroud)

回去:

- (void)goBack
{
[self.navigationController popViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)

错误:

2014年1月5日22:03:13.344 tablepractice [12509:70B] - [DetailViewController GoBack的:]:无法识别的选择发送到实例0x8b72130 2014年1月5日22:03:13.348 tablepractice [12509:70B] *终止应用程序由于未捕获的异常'NSInvalidArgumentException',原因: ' - [DetailViewController GoBack的:]:无法识别的选择发送到实例0x8b72130'*第一掷调用堆栈:(0的CoreFoundation 0x017405e4 exceptionPreprocess + 180 1 libobjc.A.dylib
0x014c38b6 objc_exception_throw + 44 2的CoreFoundation
0x017dd903 - [NSObject(NSObject)doesNotRecognizeSelector:] + 275 3
CoreFoundation 0x0173090b __ forwarding
+ 1019 4 …

uibutton ios

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

编译器是否保存函数的参数?

我有一个函数,它使用GCD在另一个线程中通过索引加载图像.

所以我们假设:

-(void)loadMainImageToIndex:(long)index
{
    NSDictionary *dic=[mainData objectAtIndex:index];
    NSString *userImageUrl=[dic objectForKey:@"url"];
    NSURL *userUrl=[NSURL URLWithString:userImageUrl];
    [self downloadImageWithURL:userUrl completionBlock:^(BOOL succeeded, NSData *tdata)
     {
         if (succeeded)
         {

             dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^
                            {

                          //do something here 

                          dispatch_async(dispatch_get_main_queue(), ^
                                               {
                           //do something here that uses the index argument
Run Code Online (Sandbox Code Playgroud)

我称这个功能为3次:

[self loadMainImageToIndex:0];
[self loadMainImageToIndex:1];
[self loadMainImageToIndex:2];
Run Code Online (Sandbox Code Playgroud)

问题是,当第一次调用将结束线程操作时,将达到这一点:

dispatch_async(dispatch_get_main_queue()
Run Code Online (Sandbox Code Playgroud)

他会在那里看到index=0,还是他会看到最后一个指数called (==2)

问题是,他是否复制了整个函数,所以当他完成时他能记住启动该方法的论点?另外一件事,同时召唤它3次,是一种不好的做法吗?

谢谢.

objective-c ios objective-c-blocks

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

当equals(Object o)返回true时,使用contains(Object o)比较两个不同的对象将返回false

[下面的固定问题]

我有这门课:

Class Doc() {
  private String D;

  Doc(String d) {
    D = d;
  }

  @Override
  public boolean equals(Object o) {
    if (o instanceOf String) {
      if (o.equals(D)) return true;
      else return false;
    } else return false;
  }

  @Override
  public int hashCode() {
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

如果我运行测试,使用例如"abc"作为参数启动Doc()然后使用Doc().equals("abc")它返回true - 正如我所料.如果我使用:

ArrayList docs = new ArrayList<Doc>();
Doc d = new Doc("123");
Docs.add(d);
System.out.println(docs.contains("123"));
Run Code Online (Sandbox Code Playgroud)

它返回false,我不确定为什么.我已经尝试将输出添加到.equals()方法以检查它是否被使用,它是.这个代码hashCode()只是一些虚假(我知道我应该做一些正确的事,我只是不确定如何) - 但我只会使用equals().

不过,我读到的地方equals()也会检查hashCode(); 如果我在其中添加System.out.println(".")第一行 …

java contains equals arraylist

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

NSString的stringWithFormat的简写类似于@ [],@ {},@()的NSArrays,NSDictionaries和NSNumbers?

我的问题分为两部分:

  1. 是否有通过stringWithFormat创建NSStrings的简写:类似于标题中提到的创建数组,字典和数字的简写.有点像:

NSString *bar = @"bar"; NSString *foobar = @<@"foo %@", bar>

  1. 如果没有,是否有可能创建这些缩写,如果是,如何?

我在整个项目中使用了stringWithFormat方法,我认为这对代码简单性和整洁性都非常有用.

macros objective-c nsstring

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

如何在Objective-C中创建数字数组?

我试图创建我的第一个iphone程序,我意识到制作2个dims的数组或矩阵对我来说很难...... :-(

*我如何以及在哪里声明这样的东西(取自java)所以所有的功能都可以看到它:

int[] myArray = new int[6];
Run Code Online (Sandbox Code Playgroud)

*我怎样才能转发此功能:

  public  int[] sortArray (int[] myArray){
  int tmp;
  for (int x = 0; x < myArray.length; x++) {
   for (int y = x+1; y < 6; y++) {
    if (myArray[y] < myArray[x]) {
     tmp = myArray[x];
     myArray[x] = myArray[y];
     myArray[y] = tmp;
    }
   }
  }
  return myArray;
 }
Run Code Online (Sandbox Code Playgroud)

*以及我如何称呼此功能?

sortArray(myArray);
Run Code Online (Sandbox Code Playgroud)

谢谢大家!沙龙

c objective-c

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

将标签文本设置为等于数组值

在myProj.h文件中,我声明了:

@property (strong, nonatomic) NSMutableArray *wordsArray;
Run Code Online (Sandbox Code Playgroud)

在.m文件中,我使用以下命令在viewDidLoad中添加一些值:

[_wordsArray addObject:[NSString stringWithFormat:@"Now is the time for all good men to come to the aid of their party."]];
[_wordsArray addObject:[NSString stringWithFormat:@"Four score and seven years ago our forefathers..."]];
[_wordsArray addObject:[NSString stringWithFormat:@"A coward dies many deaths; a brave man but one."]];
Run Code Online (Sandbox Code Playgroud)

我还在这里设置了一个计数器(在.h文件中定义为int):

__cntr = 0;
Run Code Online (Sandbox Code Playgroud)

在(IBAction)pressButton:(id)发送者我想将标签(*somelabel)文本更改为数组[0]中的下一个值(然后将_cntr迭代为1并获取该值等).所以我有:

_somelabel.text = [NSString stringWithFormat:@"%@",[_wordsArray objectAtIndex:__cntr]];
Run Code Online (Sandbox Code Playgroud)

构建,但是当我运行并按下按钮时,标签文本变为(空).

将数值添加到数组或将其拉出的问题也是如此.谢谢

objective-c nsstring nsarray ios

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

如何覆盖单例类中的属性的getter/setter目标C.

我创建了单例类,并将一个类对象(myRecords)作为其中的属性.我想在这个属性的getter/setter中做一些实现处理.

我如何覆盖此属性的getter/setter?

注意:myRecord的初始化不是在单例内完成的.

// singleton.h

@interface mySingleton : NSObject

@property(nonatomic, copy) NSString *name;

@property(nonatomic) myRecords *record;

+(mySingleton *)instance;

@end

// singleton.m
@implementation TRNApplicationContext
+(mySingleton *)instance {

static mySingleton *_instance = nil;

    @synchronized (self) {
        if (_instance == nil) {
            _instance = [[self alloc] init];
        }
    }
    return _instance;
}

-(void) setRecord:(myRecords *)record
{
    self.title = record.name;
    . . .
}

-(myRecords *) record
{
        return self.record;     // Error - EXC_BAD_ACCESS
}

@end

// TestMainViewController.m - Below is Singleton usage

@implementation …
Run Code Online (Sandbox Code Playgroud)

objective-c ios

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

Objective C整数数学错误(2200 - 100 = 1800) - 不确定原因

我正在开发一个使用NSInteger计算开启和关闭的IOS项目.在2200读取的时间相当于晚上10点.我想知道是否有一些东西在关闭后的一个小时内,所以我将整数(工作)中的实际世界时间与结束时间进行比较 - 100但数学运算没有按预期工作.

自定义类:

@property (assign) NSInteger *sus;
@property (assign) NSInteger *sue;
Run Code Online (Sandbox Code Playgroud)

在控制器中:

custom_class *location = object
resultINT = real world time in Integer with 24 hr

NSLog(@"Result INT:   %i", resultInt);
NSLog(@"location.sue:    %i", location.sue);
NSLog(@"Location - 1hr      %i", location.sue -100);
NSInteger *yellowEnd = location.sue - 100;
NSLog(@"Yellow      %i", yellowEnd);
Run Code Online (Sandbox Code Playgroud)

结果:

2014-07-13 18:23:51.269 Time-Genesis-Marcus[7591:416078] Result INT:   1823
2014-07-13 18:23:51.269 Time-Genesis-Marcus[7591:416078] location.sue:    2200
2014-07-13 18:23:51.269 Time-Genesis-Marcus[7591:416078] Location - 1hr      1800
2014-07-13 18:23:51.270 Time-Genesis-Marcus[7591:416078] Yellow      1800
Run Code Online (Sandbox Code Playgroud)

为什么第三和第四行没有返回2100?谢谢

objective-c ios

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

为什么在更改函数返回类型时,c ++代码的输出会发生变化?

class Test
{
private:
  int x;
  int y;
public:
  Test(int x = 0, int y = 0) { this->x = x; this->y = y; }
  Test &setX(int a) { x = a; return *this; }
  Test &setY(int b) { y = b; return *this; }
  void print() { cout << "x = " << x << " y = " << y << endl; }
};

int main()
{
  Test obj1(5, 5);
  obj1.setX(10).setY(20);
  obj1.print();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码输出为10 20 …

c++

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