应用程序崩溃在iPhone上不在模拟器上

时间:2016-06-10 22:55:50

标签: iphone swift swift2 ios-simulator xcode7

每当我点击列中的最后一行时,应用程序就会在iPhone上崩溃,但不会在模拟器上崩溃。其他一切都很好。我没有收到任何错误消息。代码与模拟器一起完美运行。

 import processing.video.*;
//import hypermedia.net.*;


PImage img;
PImage img2;
PImage img3;

Capture video; 
final int TOLERANCE = 20;

float XRc = 0;// XY coordinate of the center of the first target
float YRc = 0;
float XRh = 0;// XY coordinate of the center of the second target
float YRh = 0;
float XRc2 = 0; // XY coordinate of the center of the third target
float YRc2 = 0;
float XRh2 = 0;// XY coordinate of the center of the fourth target
float YRh2 = 0;

int ii=0; //Mouse click counter

color trackColor; //The first color is the center of the robot 
color trackColor2; //The second color is the head of the robot
color trackColor3; //The first color is the center of the robot 2
color trackColor4; //The first color is the center of the robot 2

void setup() {
img = loadImage("IMG_4700.JPG");
img2 = loadImage("2.JPG");
img3 = loadImage("3.JPG");
size(800,800);
video = new Capture(this,640,480);
video.start();

trackColor = color(94,164,126);
trackColor2 = color(60,110,194);
trackColor3 = color(197, 76,64);
trackColor4 = color(255,0,0);
smooth();
}

void draw() {
background(0);
if (video.available()) {
    video.read();
}

video.loadPixels();
image(video,0,0);

  float r2 = red(trackColor);
  float g2 = green(trackColor);
  float b2 = blue(trackColor);

  float r3 = red(trackColor2);
  float g3 = green(trackColor2);
  float b3 = blue(trackColor2);

  float r4 = red(trackColor3);
  float g4 = green(trackColor3);
  float b4 = blue(trackColor3);

  float r5 = red(trackColor4);
  float g5 = green(trackColor4);
  float b5 = blue(trackColor4);


  int somme_x = 0, somme_y = 0; // pour le calcul des baricentres
  int compteur = 0;

  int somme_x2 = 0, somme_y2 = 0; // pour le calcul des baricentres
  int compteur2 = 0;

  int somme_x3 = 0, somme_y3 = 0; // pour le calcul des baricentres
  int compteur3 = 0;

  int somme_x4 = 0, somme_y4 = 0; // pour le calcul des baricentres
  int compteur4 = 0;


  for(int x = 0; x < video.width; x++) {
    for(int y = 0; y < video.height; y++) {

      int currentLoc = x + y*video.width;
      color currentColor = video.pixels[currentLoc];

      float r1 = red(currentColor);
      float g1 = green(currentColor);
      float b1 = blue(currentColor);


      if(dist(r1,g1,b1,r2,g2,b2) < TOLERANCE) {
         somme_x += x;
         somme_y += y;
        compteur++;
      }

      else if(compteur > 0) { 
        XRc = somme_x / compteur;
        YRc = somme_y / compteur;
      }


      if(dist(r1,g1,b1,r3,g3,b3) < TOLERANCE) {
         somme_x2 += x;
         somme_y2 += y;
        compteur2++;
      }

      else if(compteur2 > 0) { 
        XRh = somme_x2 / compteur2;
        YRh = somme_y2 / compteur2;
      }

      if(dist(r1,g1,b1,r4,g4,b4) < TOLERANCE) {
         somme_x3 += x;
         somme_y3 += y;
        compteur3++;
      }

      else if(compteur3 > 0) { 
        XRc2 = somme_x3 / compteur3;
        YRc2 = somme_y3 / compteur3;
      }

      if(dist(r1,g1,b1,r5,g5,b5) < TOLERANCE) {
         somme_x4 += x;
         somme_y4 += y;
        compteur4++;
      }

      else if(compteur4 > 0) { 
        XRh2 = somme_x4 / compteur4;
        YRh2 = somme_y4 / compteur4;
      }

  }
  }


// track the color and show images
boolean c1 = false;
boolean c2 = false;
boolean c3 = false;


  if(XRc != 0 || YRc != 0) { // color Green detected
    c1 = true;
    c2 = false;
    c3 = false;
   } 


   if(XRh != 0 || YRh != 0) { // color blue detected
    c2 = true;
    c1 = false;
    c3 = false;
   }

    if(XRc2 != 0 || YRc2 != 0) { // color red detected
      c3 = true;
      c1 = false;
      c2 = false;
    }


     if(c1 == true) {
       image(img,0,0); // show image 1
      } else if (c2 == true) {
       image(img2,0,0); // show image 2
     } else if (c3 == true) {
       image(img3,0,0); // show image 3
     }

}

2 个答案:

答案 0 :(得分:0)

对于您正在加载的所有图片,可能是手机内存不足 - 我最近遇到了这个问题。没有错误,但有时我确实看到&#34;低内存警告&#34;在调试控制台上。

要诊断它,请创建一个图像名称数组,循环显示它以填充UIImage的数组,但检查它们是否随时加载。然后你可以将其设置为animationImages。所以,

private FacebookCallback<LoginResult> callback=new FacebookCallback<LoginResult>() {



    @Override
    public void onSuccess(LoginResult loginResult) {
        AccessToken accessToken=loginResult.getAccessToken();
        Profile profile=Profile.getCurrentProfile();
        //DisplayMessage(profile);

        GraphRequest request=GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() {
            @Override
            public void onCompleted(JSONObject object, GraphResponse response) {

                try{

                    tv1=(TextView)getView().findViewById(R.id.name);
                    tv1.setText("Name : " + object.getString("name"));

                    tv2=(TextView)getView().findViewById(R.id.birthday);
                    tv2.setText("BirthDay : " + object.getString("birthday"));

                    tv3=(TextView)getView().findViewById(R.id.id);
                    tv3.setText("link : " + object.getString("link"));

                    String id=object.getString("id");
                    Bitmap mBitmap = getFacebookProfilePicture(id);
                    img.setImageBitmap(mBitmap);

                    /*Toast.makeText(getActivity().getApplicationContext(), object.getString("name") + object.getString("birthday") +object.getString("link")
                            , Toast.LENGTH_SHORT).show();*/

                }catch (JSONException e){
                    e.printStackTrace();
                }




            }
        });

        Bundle parameters= new Bundle();
        parameters.putString("fields","name,birthday,link");
        request.setParameters(parameters);
        request.executeAsync();



    }

    @Override
    public void onCancel() {

    }

    @Override
    public void onError(FacebookException error) {

    }
}; 


public Bitmap getFacebookProfilePicture(String userID) {

    Bitmap bitmap = null;

    try {
        URL imageURL = new URL("https://graph.facebook.com/" + userID
                + "/picture?type=large");
        bitmap = BitmapFactory.decodeStream(imageURL.openConnection()
                .getInputStream());

    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return bitmap;

}

您可以在继续设置断点以查看您获得的距离。

假设这是正在进行的,修复问题,您将需要使用图像编辑程序使图像更小(以像素为单位)。就我而言,我的图像是以4000x6000像素拍摄的照片;我发现将它们调整为实际显示的大小会产生影响。此外,保存50%丢失的文件使它们大约占原始大小的15%(以字节为单位),这使得它们的加载速度更快。我向同事展示了原始的和调整大小/有损的图像,他们看不出有什么不同(一个人认为这是某种玩笑)。

答案 1 :(得分:0)

我在使用大量图像制作的应用程序时遇到了类似的问题(100)。它们的存在也减慢了应用程序的速度。当我缩小每张图片的文件大小时 - 不会影响图像质量。有效!!轻松完成预览&#39;在Apple上。

<强>解决方案:

  1. 使用&#39;预览&#39;

  2. 在Mac OSX中打开图像
  3. 转到顶部的菜单...&#39;工具&#39; ...&#39;调整尺寸&#39;

  4. 缩小图像的像素大小+保存

  5. 将新保存的图像放回到应用程序的Xcode中

  6. 将文件大小减少40%,而不会降低App工作中图像质量的任何降低!